Cursor de referência forte com tipo de dados de registro definido pelo usuário
No tutorial anterior, aprendemos como criar um cursor de referência forte PL/SQL usando a variável de tipo de dados de registro baseada em tabela. Lá demonstrei o uso do cursor ref forte para manipular os dados de todas as colunas da tabela de funcionários. Consequentemente, isso gera uma preocupação. E se quisermos os dados de alguma coluna específica da tabela? É exatamente isso que abordaremos no tutorial de hoje.
No entanto, antes de prosseguir neste tutorial, sugiro que você se familiarize com o conhecimento dos Cursores de Referência PL/SQL. Especialmente o cursor de referência forte e o tipo de dados de registro definido pelo usuário. Além disso, para sua conveniência, estou fornecendo todos os links necessários aqui:
- Como criar um cursor de referência forte usando registro baseado em tabela
- O que são tipos de dados de registro definidos pelo usuário?
O tutorial anterior mostrou com sucesso como um cursor PL/SQL Strong ref recuperou e manipulou dados de todas as colunas de uma linha. Mas e se quisermos os dados de uma coluna específica de uma linha? Digamos que queremos apenas ver o e-mail ou o salário de um funcionário. Consequentemente, não queremos gastar recursos caros para recuperar todas as informações desnecessárias. Então, podemos usar esse mesmo cursor ref para isso? Vamos descobrir.
Podemos usar o Strong Ref Cursor que criamos no tutorial anterior para recuperar dados de uma coluna específica?
A resposta a essa pergunta é Não, não podemos .
Porque esse cursor de referência forte foi criado usando o tipo de dados de registro baseado em tabela. Para ilustrar, quando criamos um tipo de registro baseado em tabela, o mecanismo Oracle cria uma estrutura de dados composta. Esta estrutura está repleta de campos correspondentes a cada coluna da tabela especificada.
Além disso, todos esses campos são atribuídos automaticamente com o mesmo nome e mesmo tipo de dados das colunas da tabela base. Mas quando se trata de inicializar um registro usando uma coluna específica, temos que fazer todo esse trabalho manualmente.
Para entendê-lo mais claramente, consulte o tutorial PL/SQL 34. Lá eu discuti como inicializar o tipo de dados de registro e seu funcionamento em detalhes.
Então, qual é a solução para esse problema?
Podemos facilmente resolver este problema. Podemos criar um cursor de referência forte PL/SQL com a variável User-Defined Record Datatype.
Exemplo:Cursor de referência forte PL/SQL com variável de tipo de dados de registro definida pelo usuário.
Por exemplo, queremos criar um cursor ref forte com a instrução SELECT. Que retorna apenas o salário do funcionário cujo ID de funcionário é 100.
SET SERVEROUTPUT ON; DECLARE --Create User-Defined Record Datatype TYPE my_rec IS RECORD ( emp_sal employees.salary%TYPE ); --Declare Strong Ref Cursor TYPE RefCur IS REF CURSOR RETURN my_rec; cur_var REFCUR; --Another anchored datatype variable for holding data at_var employees.salary%TYPE; BEGIN OPEN cur_var FOR SELECT salary FROM employees WHERE employee_id = 100; FETCH cur_var INTO at_var; CLOSE cur_var; DBMS_OUTPUT.PUT_LINE ('Salary of the employee is '||at_var); END; /
Então, vamos quebrar este código e ver o que está acontecendo aqui.
Seção de declaração
DECLARE TYPE my_rec IS RECORD ( emp_sal employees.salary%TYPE ); TYPE RefCur IS REF CURSOR RETURN my_rec; cur_var REFCUR; at_var employees.salary%TYPE;
Aqui está nossa seção de declaração. Nas primeiras três linhas desta seção, criamos nosso tipo de dados de registro definido pelo usuário com o nome my_rec. Além disso, este tipo de dados de registro definido pelo usuário tem apenas um campo que é emp_sal. Emp_sal é um campo de tipo de dados ancorado que é projetado sobre a coluna de salário da tabela de funcionários. Como emp_sal é do tipo de dados ancorado, ele receberá automaticamente o tipo de dados e a largura dos dados da coluna base que, neste caso, é o salário.
Logo em seguida declaramos nosso Cursor Strong Ref PL/SQL com o nome “RefCur”. O tipo de retorno deste cursor de referência forte é “my_rec” . Seguido pela declaração do cursor, criamos uma variável de cursor com o nome cur_var. Além disso, essa variável é usada para se referir ao cursor ref forte à frente no código.
Além da variável cursor, também temos outra variável declarada nesta seção. Esta variável é “at_var” esta é novamente uma variável de tipo de dados ancorada. Ele é usado para armazenar os dados retornados pelo cursor.
Agora vamos para a seção de execução.
Seção de Execução
BEGIN OPEN cur_var FOR SELECT salary FROM employees WHERE employee_id = 100; FETCH cur_var INTO at_var; CLOSE cur_var; DBMS_OUTPUT.PUT_LINE('Salary of the employee is '||at_var); END; /
Esta seção de execução tem quatro linhas de códigos executáveis. Vamos ver quais são.
Linha 1:declaração aberta para
Esta instrução abre dinamicamente o cursor mencionado. Em seguida, ele anexa a instrução SELECT especificada logo após a palavra-chave FOR.
No nosso caso, esta instrução está abrindo o cursor ref forte usando a variável de cursor “cur_var” – uma instrução SELECT. Que está retornando os dados apenas da “coluna salário” da tabela de funcionários.
Linha 2:buscar declaração
Esta declaração irá buscar os dados do cursor ref e armazená-los na variável “at_var”. Igualmente importante é certificar-se de que o tipo de dados dos dados buscados e da variável na qual os dados estão sendo armazenados devem corresponder. Caso contrário, haverá um erro.
Linha 3:declaração de encerramento
A terceira linha é uma declaração próxima. Fechar um cursor com o qual você terminou é uma boa prática.
Linha 4:declaração de saída
Finalmente, a última instrução da seção de execução é a instrução DBMS_OUTPUT. E está exibindo o salário do funcionário de volta para o usuário.
Essas quatro linhas completam a seção de execução deste bloco PL/SQL. Além disso, a execução bem-sucedida deste código deve mostrar o salário com a string formatada.
São daqueles que aprendem melhor assistindo vídeo? Então aqui está o tutorial em vídeo sobre o cursor de referência forte com tipo de dados de registro definido pelo usuário.
É isso para este tutorial. Certifique-se de compartilhar este blog em suas mídias sociais e ajudar os outros a aprender. Você pode se inscrever no canal do YouTube para tutoriais mais interessantes. Obrigado e tenha um ótimo dia!