Oracle Tipo de registros PL/SQL con ejemplos
โก Resumen inteligente
El tipo de registro PL/SQL es un tipo de datos complejo que agrupa varias columnas, cada una con su propio nombre y tipo de datos, en un nuevo tipo. Un registro puede definirse a nivel de base de datos como un objeto almacenado o dentro de un subprograma, y โโse accede a sus campos mediante el operador punto.

ยฟQuรฉ es un tipo de registro?
Un tipo de registro es un tipo de dato complejo que permite al programador crear un nuevo tipo de dato con la estructura de columnas deseada. Sus principales caracterรญsticas son:
- Agrupa una o mรกs columnas para formar un nuevo tipo de datos.
- Cada una de estas columnas tiene su propio nombre y tipo de datos.
- Un tipo de registro puede aceptar los datos como un รบnico registro compuesto por muchas columnas, o puede aceptar el valor de una columna especรญfica de un registro.
- Un tipo de registro es simplemente un nuevo tipo de dato. Una vez creado, se almacena como un nuevo tipo de dato y puede utilizarse para declarar una variable en los programas.
- Utiliza la palabra clave 'TIPO' para indicar al compilador que se estรก creando un nuevo tipo de datos.
- Se puede crear en el nivel de base de datos, almacenado como un objeto de base de datos y utilizado en toda la base de datos, o en el nivel de subprograma, visible รบnicamente dentro del subprograma.
- Tambiรฉn se puede declarar un tipo de registro a nivel de base de datos para las columnas de una tabla, de modo que una sola columna pueda contener datos complejos.
- Se accede a los datos haciendo referencia al nombre de la variable, luego al operador de punto (.), luego al nombre de la columna, como ' . '.
Sintaxis para declarar un tipo de registro
Sintaxis para declaraciรณn a nivel de base de datos:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
En la primera sintaxis, la palabra clave 'CREATE TYPE' indica al compilador que cree el tipo de registro denominado "type_name_db" con las columnas especificadas como un objeto de base de datos. Esto se proporciona como una instrucciรณn independiente, no dentro de ningรบn bloque.
Sintaxis para la declaraciรณn a nivel de subprograma:
DECLARE TYPE <type_name> IS RECORD ( <column1> <datatype>, ); BEGIN <execution_section>; END;
En esta sintaxis, creamos el tipo de registro denominado "type_name" รบnicamente dentro del subprograma. En ambos mรฉtodos, la forma de definir la columna y el tipo de datos es similar.
Ejemplo 1: Tipo de registro como objeto de base de datos
En este programa, veremos cรณmo crear un tipo de registro como objeto de base de datos. Crearemos el tipo de registro 'emp_det' con cuatro columnas. Las columnas y sus tipos de datos son:
- 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
Code Explicaciรณn
- El cรณdigo anterior crea el tipo emp_det como un objeto de base de datos.
- Tiene 4 columnas: emp_no, emp_name, manager y salary, segรบn lo definido.
- Ahora 'emp_det' es similar a cualquier otro tipo de datos (como NUMBER o VARCHAR2) y es visible en toda la base de datos. Por lo tanto, se puede usar en cualquier parte de la base de datos para declarar una variable de este tipo.
Ejemplo 2: Acceso a nivel de columna a nivel de subprograma
En este ejemplo, veremos cรณmo crear un tipo de registro a nivel de subprograma y cรณmo rellenarlo y obtener valores por columna. Creamos el tipo de registro 'emp_det' a nivel de subprograma y lo usamos para rellenar y mostrar datos.
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
Code Explicaciรณn
- Code lรญneas 2-8: El tipo de registro 'emp_det' se declara con las columnas emp_no, emp_name, manager y salary de tipo de datos NUMBER, VARCHAR2, NUMBER y NUMBER.
- Code lรญnea 9: La variable guru99_emp_rec estรก declarada como tipo de datos 'emp_det'. variable puede contener un valor que incluya los cuatro campos.
- Code lรญnea 11: Completando el campo 'emp_no' de 'guru99_emp_rec' con el valor 1001.
- Code lรญnea 12: Rellenar el campo 'emp_name' con el valor XXX.
- Code lรญnea 13: Rellenar el campo 'gerente' con el valor 1000.
- Code lรญnea 14: Rellenar el campo 'salario' con el valor 10000.
- Code lรญneas 15-19: Mostrar el valor de 'guru99_emp_rec' en la salida.
Ejemplo 3: Acceso a nivel de fila a nivel de subprograma
En este ejemplo, vemos cรณmo crear un tipo de registro a nivel de subprograma y rellenarlo a nivel de fila. Creamos el tipo de registro 'emp_det' a nivel de subprograma y lo usamos para rellenar y mostrar datos.
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 Explicaciรณn
- Code lรญneas 2-8: El tipo de registro 'emp_det' se declara con las columnas emp_no, emp_name, manager y salary de tipo de datos NUMBER, VARCHAR2, NUMBER y NUMBER.
- Code lรญnea 9: La variable guru99_emp_rec estรก declarada como tipo de datos 'emp_det' y puede contener los cuatro campos.
- Code lรญnea 11: Rellenar la tabla emp con 1002 como emp_no, YYY como emp_name, 15000 como salary y 1000 como manager number.
- Code lรญnea 12: Confirmando la transacciรณn de inserciรณn.
- Code lรญnea 13: Rellenar la variable 'guru99_emp_rec' a nivel de fila a partir de la consulta SELECT para el empleado nรบmero 1002.
- Code lรญneas 15-19: Mostrar 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 a un tipo de registro a nivel de columna al redirigir su valor a cualquier modo de salida. Observe que, en este ejemplo, el orden de la lista SELECT no coincide con el orden de los campos del registro, por lo que los valores de salario y gerente aparecen intercambiados en la salida.
Tipos de registros PL/SQL
Mรกs allรก del registro definido por el programador que se muestra arriba, Oracle Ofrece dos tipos de registros anclados que copian su estructura automรกticamente. Su uso evita tener que volver a declarar las columnas y mantiene el registro sincronizado con la tabla o el cursor en el que se basa.
| Tipo de registro | Declarado con | La estructura proviene de |
|---|---|---|
| Registro basado en tablas | nombre_tabla%TIPO_FILA | Todas las columnas de una tabla |
| Registro basado en cursor | nombre_del_cursor%TIPO_DE_FILA | La lista de selecciรณn del cursor |
| Registro definido por el programador | TIPO โฆ ES REGISTRO | Columnas que usted enumera a mano |
Un registro %ROWTYPE es la opciรณn mรกs segura cuando la forma debe seguir una tabla o una cursor, porque un cambio de columna se detecta automรกticamente en la siguiente compilaciรณn.




