sql >> Database teknologi >  >> RDS >> Oracle

Oracle PL/SQL-samlinger - Opret indlejrede tabel i databasen

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)
  1. MySQL LN() Funktion – Returner den naturlige logaritme af et tal

  2. Hvordan tilføjer man kommentarer i SQL?

  3. Sådan slipper du udenlandske nøglebegrænsninger i SQL Server-databasen for alle tabellerne - SQL Server / TSQL vejledning del 72

  4. Sikkerhedsfunktioner i SQL Server 2017