Estos son tipos de datos compuestos que nos permiten trabajar con las propiedades esenciales de los datos sin tener que ocuparnos demasiado de los detalles. Podríamos decir que es una forma más simplificadada de trabajar con los datos.
Record Types
Los record types son tipos de datos compuestos cuyos campos pueden tener diferentes tipos de datos. Se pueden usar los Record Types para tener varios elementos relacionados y pasarlos a los subprogramas con un único parámetro. Utilizamos la palabra reservada TYPE para la definición del registro.
El uso normal que daremos a los Record Types será para almacenar todo los campos de una fila de una tabla de la base de datos. Podremos usar el atributo %ROWTYPE a la hora de declarar un registro que represente un resultado de una consulta de una única fila o pueden ser varias filas. Lo más sencillo y destacable es que lo haremos sin especificar los nombres y tipos de los campos.
Si decidimos hacer uso del atributo %ROWTYPE, la definición TYPE .. IS RECORD está implícita y la palabra clave TYPE será innecesaria.
Vamos a empezar con la forma más tradicional de crear un Record Type y le asignaremos datos:
DECLARE -- Vamos a declarar el Record de la forma tradicional TYPE cliente_rec IS RECORD ( customer_id OEHR_CUSTOMERS.customer_id%TYPE, first_name OEHR_CUSTOMERS.cust_first_name%TYPE, last_name OEHR_CUSTOMERS.cust_last_name%TYPE ); cliente cliente_rec; -- declare a person variable of type person_rec BEGIN -- Vamos a insertar datos en el Record que hemos creado cliente.customer_id := 20; cliente.first_name := 'Juan'; cliente.last_name := 'Andrés'; -- Se muestra la información que contiene el Record DBMS_OUTPUT.PUT_LINE( 'Empleado: ' ||cliente.customer_id ||' '||cliente.last_name || ', ' || cliente.first_name ); END;
Resultado:
Empleado: 20 Andrés, Juan
Statement processed.
0.01 seconds
Ahora, en este ejemplo, vamos a traer varias filas desde una tabla de la base de datos. crearemos un cursor explícito y vamos a usar el %ROWTYPE y verán que no usaremos TYPE .. IS RECORD ya que no es necesario.
DECLARE -- declaración del cursor CURSOR cursor1 IS SELECT * FROM OEHR_CUSTOMERS WHERE COUNTRY_ID = 'US'; -- Declaramos el Record en este punto -- No se necesita la palabra resetvada TYPE .. IS RECORD --cuando usamos el %ROWTYPE customer_rec cursor1%ROWTYPE; BEGIN -- acá el cursor explícito OPEN cursor1; LOOP FETCH cursor1 INTO customer_rec; -- Metemos la fila entera dentro del record EXIT WHEN cursor1%NOTFOUND; -- El record contiene todos los campos de una fila de la tabla OEHR_CUSTOMERS DBMS_OUTPUT.PUT_LINE( 'Customer: ' || customer_rec.CUSTOMER_ID || ' - ' || customer_rec.CUST_LAST_NAME || ', ' || customer_rec.CUST_FIRST_NAME ); END LOOP; CLOSE cursor1; END;
Resultado:
Customer: 101 - Welles, Constantin
Customer: 102 - Pacino, Harrison
Customer: 103 - Taylor, Manisha
Customer: 104 - Sutherland, Harrison
Customer: 105 - MacGraw, Matthias
Customer: 106 - Hannah, Matthias
Statement processed.
0.01 seconds