SQL y Objetos
Otra opción que tenemos es que los TYPEs se pueden utilizar en tablas.
Hay dos opciones:
- Crear tablas de objetos (Object Table)
- Utilizar en tablas SQL como un campo más.
Nosotros vamos a ver exclusivamente esta última opción.
Utilización de Objetos en tablas SQL
Los Objetos se pueden utilizar como campos en tablas SQL como un campo más:
CREATE TYPE test_type AS ... CREATE TABLE TEST (A NUMBER PRIMARY KEY, T test_type);
Manejo de los objetos en tablas
Cuando tenemos objetos como campos de tabla, no se puede acceder directamente a un elemento desde la tabla: primero hay que leerlo a una variable PL y, después, manipularlo desde PL.
No obstante, los elementos del objeto se pueden indexar mendiante los índices funcionales.
Vamos a ver ejemplos:
v type_test; Begin SELECT t INTO v FROM test WHERE A = 3; # por complejo que sea el tipo type_test, es un solo registro y se lee como tal v.c1 := 4; # modificamos la variable en memoria UPDATE test SET t = v WHERE A = 3; # modificamos en la BBDD COMMIT; INSERT INTO test VALUES (4,v); # trabajar con variables... INSERT INTO test VALUES (5, type_test(....)) # o bien con el constructor
Transformación de los datos
Es de destacar que, el formato de los datos en SQL (BBDD) y en PL/SQL (memoria) es el mismo.
Por tanto, si utilizamos PL/SQL para manejar este tipo de datos, el intercambio entre la BBDD y PL/SQL es muy rápido porque no hat transformación de los datos. En algunos casos sencillos, el paso de la BBDD a PL y viceversa se limita a un 'memcpy' (copia en memoria)
