W Oracle zagnieżdżona tabela może być przechowywana jako kolumna bazy danych. Oznacza to, że cała tabela zagnieżdżona jest zawarta w jednym wierszu tabeli bazy danych, a każdy wiersz bazy danych może zawierać inną tabelę zagnieżdżoną. Aby przechowywać zagnieżdżoną tabelę w bazie danych, musisz użyć CREATE TYPE
instrukcja, aby utworzyć zagnieżdżony typ tabeli, zamiast instrukcji typu w bloku PL/SQL.
Używając CREATE TYPE
, typ jest przechowywany w słowniku danych, dzięki czemu można go używać jako typ kolumny. Poniższy przykład ilustruje, jak utworzyć zagnieżdżoną tabelę jako kolumnę bazy danych.
Oracle PL/SQL — tworzenie zagnieżdżonej tabeli w bazie danych
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;
Należy zwrócić uwagę na kilka rzeczy dotyczących powyższego zestawienia i tworzenia zagnieżdżonych tabel w bazie danych:
- Typ tabeli został zaprojektowany za pomocą
CREATE TYPE
oświadczenie, aby można je było przechowywać w słowniku danych. - Typ tabeli jest używany w definicji tabeli, podobnie jak obiekt kolumny.
- Dla każdej zagnieżdżonej tabeli w danej tabeli bazy danych,
NESTED TABLE
klauzula jest wymagana. Ta klauzula wskazuje nazwę tabeli sklepu.
Tabela magazynu to tabela generowana przez system, która służy do przechowywania rzeczywistych danych w tabeli zagnieżdżonej. Te dane nie są przechowywane w linii z resztą kolumn tabeli; jest przechowywany oddzielnie.
required_reading
kolumna będzie przechowywać REF
w required_tab
tabeli, w której będzie przechowywana lista książek. Dla każdego wiersza course_material
, required_reading zawiera REF do odpowiednich wierszy w required_tab.
UWAGA
Tabela sklepu (required_tab
w powyższym przykładzie) może istnieć w innym schemacie i mieć inne parametry przechowywania niż główna tabela. Tabela sklepu może być opisana i istnieje w user_tables
, ale nie można uzyskać do nich bezpośredniego dostępu.
Jeśli spróbujesz wykonać zapytanie lub bezpośrednio zmodyfikować tabelę magazynu, otrzymasz błąd Oracle „ORA-22812:nie można odwoływać się do tabeli przechowywania kolumny tabeli zagnieżdżonej”. Zawartość tabeli sklepu jest manipulowana przez SQL w głównej tabeli.
Zobacz też:
- Oracle PL/SQL — kolekcje (tabele zagnieżdżone)