Database
 sql >> Base de Dados >  >> RDS >> Database

Cursor de referência forte PL/SQL com tipo de dados de registro definido pelo usuário

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!