Estructuras de datos

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