Oracle Tipo de registros PL/SQL com exemplos

O que é tipo de registro?

Um tipo de registro é um tipo de dados complexo que permite ao programador criar um novo tipo de dados com a estrutura de colunas desejada.

  • Agrupa uma ou mais colunas para formar um novo tipo de dados
  • Essas colunas terão seu próprio nome e tipo de dados
  • Um tipo de registro pode aceitar os dados
    • Como um único registro que consiste em muitas colunas OU
    • Pode aceitar o valor de uma coluna específica de um registro
  • Tipo de registro significa simplesmente um novo tipo de dados. Uma vez criado o tipo de registro, ele será armazenado como um novo tipo de dado no banco de dados e o mesmo deverá ser utilizado para declarar uma variável em programas.
  • Ele usará a palavra-chave 'TIPO' para instruir o compilador que está criando o novo tipo de dados.
  • Pode ser criado em “nível do banco de dados” que pode ser armazenado como objeto de banco de dados, usado em todo o banco de dados ou pode ser criado no “níveis de subprograma”, que é visível apenas dentro dos subprogramas.
  • O tipo de registro no nível do banco de dados também pode ser declarado para as colunas da tabela para que uma única coluna possa conter os dados complexos.
  • Os dados neste tipo de dados podem ser acessados ​​referindo-se ao seu nome_da_variável seguido pelo operador de ponto (.) seguido pelo nome_da_coluna, ou seja, ' . '

Sintaxe para declaração no nível do banco de dados:

Oracle Tipo de registros PL/SQL

CREATE TYPE <type_name_db> IS RECORD
(
<column 1> <datatype>,
);

Na primeira sintaxe, podemos ver a palavra-chave 'CREATE TYPE' que instrui o compilador a criar o tipo de registro denominado “type_name_db” com a coluna especificada como um objeto de banco de dados.

Isso é fornecido como uma instrução individual e não dentro de nenhum bloco.

Sintaxe para declaração em nível de subprograma:

Oracle Tipo de registros PL/SQL

DECLARE
TYPE <type_name> IS RECORD
(
<columnl> <datatype>,
);
BEGIN
<execution_section>;
END;

Na sintaxe, estamos criando o tipo de registro denominado “type_name” apenas dentro do subprograma.

Em ambos os métodos de declaração, a forma de definir a coluna e o tipo de dados é semelhante.

Exemplo 1: Tipo RECORD como objeto de banco de dados

Neste programa, veremos como criar “Tipo de registro” como objeto de banco de dados. Vamos criar o tipo de registro 'emp_det' com quatro colunas. As colunas e seus tipos de dados são os seguintes:

  • EMP_NO (NÚMERO)
  • EMP_NAME (VARCHAR2 (150))
  • GERENTE (NÚMERO)
  • SALÁRIO (NÚMERO)
CREATE TYPE emp_det IS OBJECT
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER 
);
/

Saída:

Type created

Explicação do código:

  • O código acima criará o tipo emp_det como um objeto de banco de dados.
  • Terá 4 colunas emp_no, emp_name, manager e salário conforme definido.
  • Agora 'emp_det' é semelhante a outros tipo de dados (como NUMBER, VARCHAR@, etc.) E é visível em todo o banco de dados. Portanto, isso pode ser usado em todo o banco de dados para declarar a variável deste tipo.

Saída:

Criado o tipo 'emp_det' como tipo de registro no nível do banco de dados.

Exemplo 2: Tipo de registro no nível do subprograma - acesso no nível da coluna

Neste exemplo, veremos como criar um tipo de registro no nível do subprograma e como preencher e buscar os valores dele por nível de coluna.

Criaremos o record_type 'emp_det' no nível do subprograma e usaremos o mesmo para preencher e exibir os dados dele.

Oracle Tipo de registros PL/SQL

DECLARE
TYPE emp_det IS RECORD
(
EMP_NO NUMBER, 
EMP_NAME VARCHAR2(150),
MANAGER NUMBER, 
SALARY NUMBER
);
guru99_emp_rec emp_det;
BEGIN
guru99_emp_rec.emp_no:= 1001;	
guru99_emp_rec.emp_name:=:'XXX';	
guru99_emp_rec.manager:= 1000;	
guru99_emp_rec.salary:=10000;	
dbms_output.put.line('Employee Detail');
dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); 
dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); 
dbms_output.put_line ('Employee Salary: ' ||guru99_emp_rec.salary); 
dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager);
END;
/

Saída:

Employee Detail
Employee Number: 1001
Employee Name: XXX
Employee Salary: 10000 
Employee Manager Number: 1000

Explicação do código:

  • Linha de código 2-8: O tipo de registro 'emp_det' é declarado com colunas emp_no, emp_name, salário e gerente do tipo de dados NUMBER, VARCHAR2, NUMBER, NUMBER.
  • Linha de código 9: A variável guru99_emp_rec é declarada como tipo de dados 'emp_det'. Agora isso variável pode conter o valor que contém todos os 4 campos/colunas acima.
  • Linha de código 11: Preenchendo o campo 'emp_no' de 'guru99_emp_rec' com valor 1001.
  • Linha de código 12: Preenchendo o campo 'emp_name' de 'guru99_emp_rec' com o valor XXX.
  • Linha de código 13: Preenchendo o campo 'manager' de 'guru99_emp_rec' com valor 1000.
  • Linha de código 14: Preenchendo o campo 'salário' de 'guru99_emp_rec' com valor 10000.
  • Linha de código 15-19: Exibindo o valor de 'guru99_emp_rec' na saída.

Exemplo 3: Tipo de registro no nível de subprograma - acesso em nível de linha

Neste exemplo, veremos como criar um tipo de registro no nível do subprograma e como preenchê-lo no nível da linha. Criaremos o record_type 'emp_det' no nível do subprograma e usaremos o mesmo para preencher e exibir os dados dele.

Oracle Tipo de registros PL/SQL

DECLARE
TYPE emp_det IS RECORD
(
EMP_NO NUMBER,
EMP_NAME YARCHAR2( 150),
MANAGER NUMBER,
SALARY NUMBER
);
guru99_emp_rec emp_det;
BEGIN
INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000);
COMMIT;
SELECT emp_no, emp_name, salary, manager INTO guru99_emp_rec FROM emp WHERE emp_no=1002;
dbms_output.put_line (‘Employee Detail’);
dbms_output.put_line (‘Employee Number: '||guru99_emp_rec.emp_no); 
dbms_output.put_line (‘Employee Name: '||guru99_emp_rec.emp_name); 
dbms_output.put_line (‘Employee Salary: '||guru99_emp_rec. salary); 
dbms_output.put_line (‘Employee Manager Number: '||guru99_emp_rec.manager);
END;
/

Explicação do código:

  • Linha de código 2-8: O tipo de registro 'emp_det' é declarado com colunas emp_no, emp_name, salário e gerente do tipo de dados NUMBER, VARCHAR2, NUMBER, NUMBER.
  • Linha de código 9: A variável guru99_emp_rec é declarada como tipo de dados 'emp_det'. Agora esta variável pode conter o valor que contém todos os 4 campos/colunas acima.
  • Linha de código 11: Preenchendo a tabela emp com dados 1002 como emp_no, YYY como emp_name, 15000 como salário e 1000 como número do gerente.
  • Linha de código 12: Confirmando a transação de inserção acima.
  • Linha de código 13: Preencher a variável 'guru99_emp_rec' como dados em nível de linha da consulta de seleção para o funcionário número 1002.
  • Linha de código 15-19: Exibindo o valor de 'guru99_emp_rec' na saída.

Saída:

Employee Detail 
Employee Number: 1002 
Employee Name: YYY 
Employee Salary: 1000 
Employee Manager Number: 15000

Nota: O tipo de registro pode ser acessado apenas no nível da coluna enquanto redireciona seu valor para qualquer modo de saída.