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 TYPEsætning, så den kan gemmes i dataordbogen. - Tabeltypen bruges i tabeldefinitionen ligesom et kolonneobjekt.
- For hver indlejrede tabel i en given databasetabel,
NESTED TABLEklausul 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)