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)