Continuando con la temática del posteo anterior, les voy a dejar lo que resta para cerrar el tema de nested table.
Como he mencionado en la Parte 1, una tabla anidada se puede almacenar como una columna de una tabla. Para esto hay que definir la tabla anidada con la orden CREATE TYPE para crear el tipo de la tabla anidada en lugar de TYPE.
Ejemplo:
CREATE TYPE inf_libro AS OBJECT(titulo varchar2(40),
nombre_autor varchar2(40),
isbn number);
CREATE TYPE isbn_libros AS TABLE OF inf_libro;
CREATE TABLE prestamo(fecha_entrega date,
nro_socio number(10),
libros_prestados isbn_libros)
NESTED TABLE libros_prestados STORE AS prestados_tabla;
Una tabla anidada almacenada en una tabla de la base de datos se puede manipular en su integridad o pueden manipularse sus filas individuales. Cualquiera de los dos casos, se pueden utilizar órdenes SQL. El índice de la tabla anidada sólo puede utilizarse cuando la tabla está en PL/SQL.
Para insertar una fila en una tabla anidada se utiliza la orden INSERT. Hay que tener en cuenta que la tabla se crea e inicializa en PL/SQL y después se inserta en la base de datos.
Ejemplo:
DECLARE
libros isbn_libros := isbn_libros(inf_libro('Libro 1', 'Autor1',1234));
BEGIN
INSERT INTO prestamo VALUES (sysdate, 12, isbn_libros(inf_libro('Libro 2', 'Autor 2',1234),
inf_libro('Libro 3','Autor 3',3456)));
INSERT INTO prestamo VALUES (sysdate, 24, libros);
END;
libros isbn_libros := isbn_libros(inf_libro('Libro 1', 'Autor1',1234));
BEGIN
INSERT INTO prestamo VALUES (sysdate, 12, isbn_libros(inf_libro('Libro 2', 'Autor 2',1234),
inf_libro('Libro 3','Autor 3',3456)));
INSERT INTO prestamo VALUES (sysdate, 24, libros);
END;
De forma similar, se utiliza UPDATE para modificar la tabla almacenada
Ejemplo:
DECLARE
libros isbn_libros := isbn_libros(inf_libro('Libro 1',
'Autor 1',
1234567),
inf_libro('Libro 2',
'Autor 2',
1234));
BEGIN
UPDATE prestamo
SET libros_prestados = libros
WHERE nro_socio = 24;
END;
/
Con DELETE puede eliminar una fila que contenga una tabla anidada.
Ejemplo:
BEGIN
DELETE FROM prestamo WHERE nro_socio = 24;
END;
/
Cuando se recupera una tabla anidada en una variable PL/SQL, se asignan claves comenzando por 1 hasta llegar al número de elementos que contiene la tabla. Este valor puede determinarse mediante el método COUNT, el cual devuelve un número entero correspondiente al número de elementos que tiene actualmente la colección.
Ejemplo:
DECLARE
libros isbn_libros;
i NUMBER;
BEGIN
SELECT libros_prestados INTO libros FROM prestamo WHERE nro_socio=12;
FOR i IN 1 .. libros.count LOOP
DBMS_OUTPUT.PUT_LINE('Título: ' || libros(i).titulo|| ' del elemento: '|| i);
END LOOP;
END;
/
No hay comentarios:
Publicar un comentario