I Oracle kan en indlejret tabel gemmes som en databasekolonne. Det betyder, at hele den indlejrede tabel er indeholdt i én række i databasetabellen, og hver række i databasen kan indeholde en anden indlejret tabel. For at gemme en indlejret tabel i databasen skal du bruge CREATE TYPE
statement to opretter den indlejrede tabeltype i stedet for en type-sætning i en PL/SQL-blok.
Ved at bruge CREATE TYPE
, er typen gemt i dataordbogen og er dermed tilgængelig til brug som kolonnetype. Følgende eksempel illustrerer, hvordan man opretter en indlejret tabel som en databasekolonne.
Oracle PL/SQL - Oprettelse af indlejret tabel i databasen
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;
Der er flere ting at bemærke ved ovenstående liste og oprettelse af indlejrede tabeller i databasen:
- Tabeltypen er designet med
CREATE TYPE
sætning, så den kan gemmes i dataordbogen. - Tabeltypen bruges i tabeldefinitionen ligesom et kolonneobjekt.
- For hver indlejrede tabel i en given databasetabel,
NESTED TABLE
klausul er påkrævet. Denne klausul angiver navnet på butikstabellen.
En lagertabel er en systemgenereret tabel, der bruges til at gemme de faktiske data i den indlejrede tabel. Disse data gemmes ikke inline med resten af tabelkolonnerne; den opbevares separat.
required_reading
kolonne vil gemme en REF
ind i required_tab
tabel, hvor listen over bøger vil blive gemt. For hver række af course_material
, required_reading indeholder en REF til de tilsvarende rækker i required_tab.
BEMÆRK
Butikstabellen (required_tab
i ovenstående eksempel) kan eksistere i et andet skema og kan have forskellige lagerparametre fra hovedtabellen. Butikstabellen kan beskrives og findes i user_tables
, men kan ikke tilgås direkte.
Hvis du forsøger at forespørge eller ændre butikstabellen direkte, får du Oracle-fejlen "ORA-22812:kan ikke henvise til den indlejrede tabelkolonnes lagertabel". Indholdet af butikstabellen manipuleres gennem SQL på hovedtabellen.
Se også:
- Oracle PL/SQL – Samlinger (indlejrede tabeller)