Oracle Tipo de registros PL/SQL con ejemplos
¿Qué es el tipo de registro?
Un tipo de registro es un tipo de datos complejo que permite al programador crear un nuevo tipo de datos con la estructura de columna deseada.
- Agrupa una o más columnas para formar un nuevo tipo de datos.
- Estas columnas tendrán su propio nombre y tipo de datos.
- Un tipo de registro puede aceptar los datos.
- Como un registro único que consta de muchas columnas O
- Puede aceptar el valor de una columna particular de un registro.
- Tipo de registro simplemente significa un nuevo tipo de datos. Una vez creado el tipo de registro, se almacenará como un nuevo tipo de datos en la base de datos y el mismo se utilizará para declarar una variable en los programas.
- Utilizará la palabra clave 'TIPO' para indicarle al compilador que está creando el nuevo tipo de datos.
- Se puede crear en “nivel de base de datos” que pueden almacenarse como objetos de base de datos, usarse en toda la base de datos o pueden crearse en el "niveles de subprograma”, que es visible sólo dentro de los subprogramas.
- El tipo de registro de nivel de base de datos también se puede declarar para las columnas de la tabla, de modo que una sola columna pueda contener datos complejos.
- Se puede acceder a los datos de este tipo de datos haciendo referencia a su nombre_de_variable seguido del operador de punto (.) seguido de nombre_de_columna, es decir, ' . '
Sintaxis para declaración a nivel de base de datos:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
En la primera sintaxis, podemos ver la palabra clave "CREAR TIPO", que le indica al compilador que cree el tipo de registro denominado "type_name_db" con la columna especificada como un objeto de base de datos.
Esto se proporciona como una declaración individual y no dentro de ningún bloque.
Sintaxis para declaración a nivel de subprograma:
DECLARE TYPE <type_name> IS RECORD ( <columnl> <datatype>, ); BEGIN <execution_section>; END;
En la sintaxis, estamos creando el tipo de registro denominado "nombre_tipo" solo dentro del subprograma.
En ambos métodos de declaración, la forma de definir la columna y el tipo de datos es similar.
Ejemplo 1: tipo RECORD como objeto de base de datos
En este programa, veremos cómo crear un "tipo de registro" como un objeto de base de datos. Vamos a crear un tipo de registro 'emp_det' con cuatro columnas. Las columnas y su tipo de datos son los siguientes:
- EMP_NO (NÚMERO)
- EMP_NOMBRE (VARCHAR2 (150))
- GERENTE (NÚMERO)
- SALARIO (NÚMERO)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
Salida:
Type created
Explicación del código:
- El código anterior creará el tipo emp_det como objeto de base de datos.
- Tendrá 4 columnas emp_no, emp_name, manager y salario como se define.
- Ahora 'emp_det' es similar a otros tipo de datos (como NÚMERO, VARCHAR@, etc.) Y es visible en toda la base de datos. Por lo tanto, esto se puede utilizar en toda la base de datos para declarar la variable de este tipo.
Salida:
Creé el tipo 'emp_det' como tipo de registro a nivel de base de datos.
Ejemplo 2: Tipo de registro a nivel de subprograma: acceso a nivel de columna
En este ejemplo, veremos cómo crear un tipo de registro a nivel de subprograma y cómo completar y recuperar los valores del mismo por nivel de columna.
Vamos a crear el tipo de registro 'emp_det' a nivel de subprograma y usaremos el mismo para completar y mostrar datos del mismo.
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; /
Salida:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Explicación del código:
- Línea de código 2-8: El tipo de registro 'emp_det' se declara con las columnas emp_no, emp_name, salario y administrador de tipo de datos NUMBER, VARCHAR2, NUMBER, NUMBER.
- Línea de código 9: La variable guru99_emp_rec se declara como tipo de datos 'emp_det'. Ahora esto variable puede contener el valor que contiene los 4 campos/columnas anteriores.
- Línea de código 11: Completando el campo 'emp_no' de 'guru99_emp_rec' con el valor 1001.
- Línea de código 12: Completando el campo 'emp_name' de 'guru99_emp_rec' con el valor XXX.
- Línea de código 13: Completando el campo 'administrador' de 'guru99_emp_rec' con el valor 1000.
- Línea de código 14: Completando el campo 'salario' de 'guru99_emp_rec' con el valor 10000.
- Línea de código 15-19: Mostrando el valor de 'guru99_emp_rec' en la salida.
Ejemplo 3: Tipo de registro en el nivel de subprograma: acceso a nivel de fila
En este ejemplo, veremos cómo crear un tipo de registro a nivel de subprograma y cómo completarlo a nivel de fila. Vamos a crear el tipo de registro 'emp_det' a nivel de subprograma y usaremos el mismo para completar y mostrar datos del mismo.
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; /
Explicación del código:
- Línea de código 2-8: El tipo de registro 'emp_det' se declara con las columnas emp_no, emp_name, salario y administrador de tipo de datos NUMBER, VARCHAR2, NUMBER, NUMBER.
- Línea de código 9: La variable guru99_emp_rec se declara como tipo de datos 'emp_det'. Ahora esta variable puede contener el valor que contiene los 4 campos/columnas anteriores.
- Línea de código 11: Completar la tabla emp con datos 1002 como emp_no, YYY como emp_name, 15000 como salario y 1000 como número de gerente.
- Línea de código 12: Confirmando la transacción de inserción anterior.
- Línea de código 13: Completar la variable 'guru99_emp_rec' como datos a nivel de fila de la consulta de selección para el empleado número 1002.
- Línea de código 15-19: Mostrando el valor de 'guru99_emp_rec' en la salida.
Salida:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Nota: Solo se puede acceder al tipo de registro en el nivel de columna mientras se redirige su valor a cualquier modo de salida.