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:
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:
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.
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.
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.