Oracle Tipo de registros PL/SQL com exemplos
โก Resumo Inteligente
O tipo de registro PL/SQL รฉ um tipo de dados complexo que agrupa vรกrias colunas, cada uma com seu prรณprio nome e tipo de dados, em um novo tipo. Um registro pode ser definido no nรญvel do banco de dados como um objeto armazenado ou dentro de um subprograma, e seus campos sรฃo acessados โโcom o operador ponto.

O que รฉ um tipo de registro?
Um tipo de registro รฉ um tipo de dado complexo que permite ao programador criar um novo tipo de dado com a estrutura de colunas desejada. Suas principais caracterรญsticas sรฃo:
- Agrupa uma ou mais colunas para formar um novo tipo de dados.
- Cada uma dessas colunas possui seu prรณprio nome e tipo de dados.
- Um tipo de registro pode aceitar os dados como um รบnico registro composto por vรกrias colunas, ou pode aceitar o valor de uma coluna especรญfica de um registro.
- Um tipo de registro รฉ simplesmente um novo tipo de dado. Uma vez criado, ele รฉ armazenado como um novo tipo de dado e pode ser usado para declarar uma variรกvel em programas.
- Utiliza a palavra-chave 'TIPO' Para instruir o compilador de que um novo tipo de dados estรก sendo criado.
- Pode ser criado no nรญvel de banco de dados, armazenado como um objeto de banco de dados e usado em todo o banco de dados, ou no nรญvel de subprograma, visรญvel apenas dentro do subprograma.
- Um tipo de registro em nรญvel de banco de dados tambรฉm pode ser declarado para colunas de tabela, permitindo que uma รบnica coluna contenha dados complexos.
- Os dados sรฃo acessados โโreferenciando o nome da variรกvel, seguido por um ponto (.), e entรฃo o nome da coluna, como em ' . '.
Sintaxe para declarar um tipo de registro
Sintaxe para declaraรงรฃo no nรญvel do banco de dados:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
Na primeira sintaxe, a palavra-chave 'CREATE TYPE' instrui o compilador a criar o tipo de registro denominado โtype_name_dbโ com as colunas especificadas como um objeto de banco de dados. Isso รฉ fornecido como uma instruรงรฃo individual, nรฃo dentro de nenhum bloco.
Sintaxe para declaraรงรฃo no nรญvel do subprograma:
DECLARE TYPE <type_name> IS RECORD ( <column1> <datatype>, ); BEGIN <execution_section>; END;
Nessa sintaxe, criamos o tipo de registro denominado โtype_nameโ somente dentro do subprograma. Em ambos os mรฉtodos, a forma de definir a coluna e o tipo de dados รฉ semelhante.
Exemplo 1: Tipo de registro como um objeto de banco de dados
Neste programa, veremos como criar um tipo de registro como um objeto de banco de dados. Criaremos o tipo de registro 'emp_det' com quatro colunas. As colunas e seus tipos de dados sรฃo:
- 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
Code Explicaรงรฃo
- O cรณdigo acima cria o tipo emp_det como um objeto de banco de dados.
- Possui 4 colunas: emp_no, emp_name, manager e salary, conforme definido.
- Agora, 'emp_det' รฉ semelhante a qualquer outro. tipo de dados (como NUMBER ou VARCHAR2) e รฉ visรญvel em todo o banco de dados. Portanto, pode ser usado em qualquer lugar do banco de dados para declarar uma variรกvel desse tipo.
Exemplo 2: Acesso em nรญvel de coluna e nรญvel de subprograma
Neste exemplo, veremos como criar um tipo de registro no nรญvel do subprograma e como preenchรช-lo e recuperar valores por coluna. Criamos o tipo de registro 'emp_det' no nรญvel do subprograma e o utilizamos para preencher e exibir dados.
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
Code Explicaรงรฃo
- Code linhas 2-8: O tipo de registro 'emp_det' รฉ declarado com as colunas emp_no, emp_name, manager e salary dos tipos de dados NUMBER, VARCHAR2, NUMBER e NUMBER.
- Code linha 9: A variรกvel guru99_emp_rec รฉ declarada como do tipo de dados 'emp_det'. Isso variรกvel pode armazenar um valor que contenha todos os quatro campos.
- Code linha 11: Preenchendo o campo 'emp_no' de 'guru99_emp_rec' com valor 1001.
- Code linha 12: Preenchendo o campo 'emp_name' com o valor XXX.
- Code linha 13: Preenchendo o campo 'gerente' com o valor 1000.
- Code linha 14: Preenchendo o campo 'salรกrio' com o valor 10000.
- Code linhas 15-19: Exibindo o valor de 'guru99_emp_rec' na saรญda.
Exemplo 3: Acesso em nรญvel de linha e nรญvel de subprograma
Neste exemplo, veremos como criar um tipo de registro no nรญvel do subprograma e preenchรช-lo no nรญvel da linha. Criamos o tipo de registro 'emp_det' no nรญvel do subprograma e o utilizamos para preencher e exibir dados.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME VARCHAR2(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; /
Code Explicaรงรฃo
- Code linhas 2-8: O tipo de registro 'emp_det' รฉ declarado com as colunas emp_no, emp_name, manager e salary dos tipos de dados NUMBER, VARCHAR2, NUMBER e NUMBER.
- Code linha 9: A variรกvel guru99_emp_rec รฉ declarada como do tipo de dados 'emp_det' e pode conter todos os quatro campos.
- Code linha 11: Preenchendo a tabela emp com 1002 como emp_no, YYY como emp_name, 15000 como salary e 1000 como manager number.
- Code linha 12: Confirmando a transaรงรฃo de inserรงรฃo.
- Code linha 13: Preenchendo a variรกvel 'guru99_emp_rec' no nรญvel da linha a partir da consulta SELECT para o funcionรกrio nรบmero 1002.
- Code linhas 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
Observaรงรฃo: Um tipo de registro sรณ pode ser acessado no nรญvel da coluna ao redirecionar seu valor para qualquer modo de saรญda. Observe que, neste exemplo, a ordem da lista SELECT nรฃo corresponde ร ordem dos campos do registro, razรฃo pela qual os valores de salรกrio e gerente aparecem trocados na saรญda.
Tipos de registros PL/SQL
Alรฉm do registro definido pelo programador mostrado acima, Oracle Oferece dois tipos de registros ancorados que copiam sua estrutura automaticamente. O uso deles evita a necessidade de redeclarar colunas e mantรฉm o registro sincronizado com a tabela ou o cursor em que se baseia.
| Tipo de registro | Declarado com | A estrutura vem de |
|---|---|---|
| Registro baseado em tabela | nome_da_tabela%TIPO_DE_LINHA | Todas as colunas de uma tabela |
| Registro baseado em cursor | cursor_name%ROWTYPE | A lista de seleรงรฃo do cursor |
| Registro definido pelo programador | TIPO โฆ ร REGISTRO | Colunas que vocรช lista manualmente |
Um registro %ROWTYPE รฉ a escolha mais segura quando o formato deve seguir uma tabela ou um... cursor, porque uma alteraรงรฃo de coluna รฉ detectada automaticamente na prรณxima compilaรงรฃo.




