In Oracle kann eine verschachtelte Tabelle als Datenbankspalte gespeichert werden. Das bedeutet, dass die gesamte geschachtelte Tabelle in einer Zeile der Datenbanktabelle enthalten ist und jede Zeile der Datenbank eine andere geschachtelte Tabelle enthalten kann. Um eine verschachtelte Tabelle in der Datenbank zu speichern, müssen Sie den CREATE TYPE
verwenden -Anweisung zum Erstellen des verschachtelten Tabellentyps anstelle einer Typanweisung in einem PL/SQL-Block.
Durch die Verwendung von CREATE TYPE
, wird der Typ im Data Dictionary gespeichert und steht somit als Spaltentyp zur Verfügung. Das folgende Beispiel veranschaulicht, wie eine verschachtelte Tabelle als Datenbankspalte erstellt wird.
Oracle PL/SQL - Verschachtelte Tabelle in der Datenbank erstellen
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;
Bei der obigen Auflistung und dem Erstellen von verschachtelten Tabellen in der Datenbank sind mehrere Dinge zu beachten:
- Der Tabellentyp wird mit dem
CREATE TYPE
entworfen -Anweisung, damit sie im Data Dictionary gespeichert werden kann. - Der Tabellentyp wird in der Tabellendefinition verwendet, genau wie ein Spaltenobjekt.
- Für jede verschachtelte Tabelle in einer bestimmten Datenbanktabelle die
NESTED TABLE
Klausel erforderlich. Diese Klausel gibt den Namen der Speichertabelle an.
Eine Speichertabelle ist eine vom System generierte Tabelle, die zum Speichern der eigentlichen Daten in der verschachtelten Tabelle verwendet wird. Diese Daten werden nicht inline mit den restlichen Tabellenspalten gespeichert; es wird separat gespeichert.
Der required_reading
Spalte speichert einen REF
in den required_tab
Tabelle, in der die Liste der Bücher gespeichert wird. Für jede Zeile von course_material
, required_reading enthält einen REF auf die entsprechenden Zeilen in required_tab.
HINWEIS
Die Speichertabelle (required_tab
im obigen Beispiel) kann in einem anderen Schema existieren und andere Speicherparameter als die Haupttabelle haben. Die Speichertabelle kann beschrieben werden und existiert in user_tables
, kann aber nicht direkt aufgerufen werden.
Wenn Sie versuchen, die Speichertabelle direkt abzufragen oder zu ändern, erhalten Sie den Oracle-Fehler „ORA-22812:Auf die Speichertabelle der verschachtelten Tabellenspalte kann nicht verwiesen werden“. Der Inhalt der Speichertabelle wird über SQL in der Haupttabelle manipuliert.
Siehe auch:
- Oracle PL/SQL – Sammlungen (verschachtelte Tabellen)