Oracle
 sql >> Base de données >  >> RDS >> Oracle

Collections Oracle PL/SQL - Créer une table imbriquée dans la base de données

Dans Oracle, une table imbriquée peut être stockée en tant que colonne de base de données. Cela signifie que la table imbriquée entière est contenue dans une ligne de la table de base de données, et chaque ligne de la base de données peut contenir une table imbriquée différente. Pour stocker une table imbriquée dans la base de données, vous devez utiliser le CREATE TYPE pour créer le type de table imbriquée, plutôt qu'une instruction de type dans un bloc PL/SQL.

En utilisant CREATE TYPE , le type est stocké dans le dictionnaire de données et peut donc être utilisé comme type de colonne. L'exemple suivant illustre comment créer une table imbriquée en tant que colonne de base de données.

Oracle PL/SQL - Création d'une table imbriquée dans la base de données

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;

Il y a plusieurs choses à noter concernant la liste ci-dessus et la création de tables imbriquées dans la base de données :

  • Le type de table est conçu avec le CREATE TYPE déclaration afin qu'elle puisse être stockée dans le dictionnaire de données.
  • Le type de table est utilisé dans la définition de table, tout comme un objet de colonne.
  • Pour chaque table imbriquée dans une table de base de données donnée, la NESTED TABLE clause est requise. Cette clause indique le nom de la table de magasin.

Une table de magasin est une table générée par le système qui est utilisée pour stocker les données réelles dans la table imbriquée. Ces données ne sont pas stockées en ligne avec le reste des colonnes du tableau ; il est stocké séparément.

Le required_reading la colonne stockera un REF dans le required_tab table, où la liste des livres sera stockée. Pour chaque ligne de course_material , required_reading contient une référence aux lignes correspondantes dans required_tab.

REMARQUE

La table de magasin (required_tab dans l'exemple ci-dessus) peuvent exister dans un autre schéma et peuvent avoir des paramètres de stockage différents de la table principale. La table de magasin peut être décrite et existe dans user_tables , mais n'est pas accessible directement.

Si vous tentez d'interroger ou de modifier directement la table de stockage, vous obtiendrez l'erreur Oracle "ORA-22812 :impossible de référencer la table de stockage de la colonne de table imbriquée". Le contenu de la table de magasin est manipulé via SQL sur la table principale.

Voir aussi :

  • Oracle PL/SQL – Collections (tables imbriquées)