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.

  • 🧱 Definición: Un tipo de registro agrupa una o más columnas en un único tipo de datos nuevo.
  • 🔑 Palabra clave: La palabra clave TYPE le indica al compilador que se está creando un nuevo tipo de datos.
  • 🏛️ Dos niveles: Un registro a nivel de base de datos es un objeto almacenado; un registro a nivel de subprograma solo es visible dentro de ese subprograma.
  • 🔗 Acceso al campo: Se accede a los campos como variable_de_registro.nombre_de_columna usando el operador punto.
  • 📥 Nivel de columna: Se pueden asignar valores a un campo a la vez.
  • 📦 Nivel de fila: Una cláusula SELECT INTO puede rellenar un registro completo a partir de una fila de una tabla.
  • 🧩 Tipos de registros: %ROWTYPE basado en tablas, %ROWTYPE basado en cursores y registros definidos por el programador.

Oracle Tipo de registros PL/SQL

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

Declaración de tipo de registro 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:

Declaración de tipo de registro 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.

Ejemplo de acceso a nivel de columna de tipo de registro

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.

Ejemplo de acceso a nivel de fila de tipo de registro

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.

Preguntas Frecuentes

Un registro agrupa distintas columnas, posiblemente de distintos tipos, en una estructura similar a una fila. Una colección contiene muchos elementos del mismo tipo, indexados por un subíndice. A menudo se combinan, formando una colección de registros.

%ROWTYPE declara un registro cuyos campos coinciden automáticamente con una tabla o cursor. Úselo cuando el registro deba reflejar esa fuente, de modo que un cambio de columna se vea reflejado sin necesidad de editar la declaración.

Sí, si ambos registros son del mismo tipo. SELECT INTO también puede rellenar un registro completo a partir de una fila de la tabla, siempre que el orden de la lista de selección coincida con el orden de los campos del registro.

Sí. La IA puede leer la definición de una tabla y generar un bloque TYPE … IS RECORD que coincida, o recomendar un %ROWTYPE cuando sea preferible un enlace directo a la tabla. Verifique los tipos de datos antes de usarlos.

Un registro a nivel de base de datos se crea con CREATE TYPE y se almacena como un objeto visible en toda la base de datos. Un registro a nivel de subprograma se declara dentro de un bloque y existe únicamente dentro de ese subprograma.

Resumir este post con: