En Oracle, una tabla anidada se puede almacenar como una columna de base de datos. Esto significa que toda la tabla anidada está contenida en una fila de la tabla de la base de datos y cada fila de la base de datos puede contener una tabla anidada diferente. Para almacenar una tabla anidada en la base de datos, debe usar el CREATE TYPE
declaración para crear el tipo de tabla anidada, en lugar de una declaración de tipo en un bloque PL/SQL.
Usando CREATE TYPE
, el tipo se almacena en el diccionario de datos y, por lo tanto, está disponible para su uso como tipo de columna. El siguiente ejemplo ilustra cómo crear una tabla anidada como una columna de base de datos.
Oracle PL/SQL:creación de una tabla anidada en la base de datos
CREATE TYPE BookObj AS OBJECT ( title VARCHAR2(40), author VARCHAR2(40), catalog_number NUMBER(4) ); CREATE TYPE BookList AS TABLE OF BookObj; CREATE TABLE course_material ( department CHAR(3), course NUMBER(3), required_reading BookList ) NESTED TABLE required_reading STORE AS required_tab;
Hay varias cosas a tener en cuenta sobre la lista anterior y la creación de tablas anidadas en la base de datos:
- El tipo de tabla está diseñado con
CREATE TYPE
declaración para que pueda almacenarse en el diccionario de datos. - El tipo de tabla se usa en la definición de la tabla, al igual que un objeto de columna.
- Para cada tabla anidada en una tabla de base de datos dada, la
NESTED TABLE
se requiere cláusula. Esta cláusula indica el nombre de la tabla de almacenamiento.
Una tabla de almacenamiento es una tabla generada por el sistema que se utiliza para almacenar los datos reales en la tabla anidada. Estos datos no se almacenan en línea con el resto de las columnas de la tabla; se almacena por separado.
La required_reading
la columna almacenará un REF
en la required_tab
tabla, donde se almacenará la lista de libros. Para cada fila de course_material
, lectura_requerida contiene un REF a las filas correspondientes en la pestaña_requerida.
NOTA
La tabla de almacenamiento (required_tab
en el ejemplo anterior) puede existir en otro esquema y puede tener diferentes parámetros de almacenamiento de la tabla principal. La tabla de almacenamiento se puede describir y existe en user_tables
, pero no se puede acceder directamente.
Si intenta consultar o modificar la tabla de almacenamiento directamente, obtendrá el error de Oracle "ORA-22812:no se puede hacer referencia a la tabla de almacenamiento de la columna de la tabla anidada". El contenido de la tabla de almacenamiento se manipula a través de SQL en la tabla principal.
Véase también:
- Oracle PL/SQL:colecciones (tablas anidadas)