I Oracle kan en kapslad tabell lagras som en databaskolumn. Det betyder att hela den kapslade tabellen finns i en rad i databastabellen, och varje rad i databasen kan innehålla olika kapslade tabeller. För att lagra en kapslad tabell i databasen måste du använda CREATE TYPE
sats to skapar den kapslade tabelltypen, snarare än en typsats i ett PL/SQL-block.
Genom att använda CREATE TYPE
, lagras typen i dataordboken och är därmed tillgänglig för användning som kolumntyp. Följande exempel illustrerar hur man skapar en kapslad tabell som en databaskolumn.
Oracle PL/SQL - Skapa kapslade tabeller 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;
Det finns flera saker att notera om ovanstående lista och skapa kapslade tabeller i databasen:
- Tabelltypen är utformad med
CREATE TYPE
uttalande så att det kan lagras i dataordboken. - Tabelltypen används i tabelldefinitionen, precis som ett kolumnobjekt.
- För varje kapslad tabell i en given databastabell,
NESTED TABLE
klausul krävs. Denna sats anger namnet på butikstabellen.
En lagringstabell är en systemgenererad tabell som används för att lagra faktiska data i den kapslade tabellen. Dessa data lagras inte i linje med resten av tabellkolumnerna; den lagras separat.
required_reading
kolumnen lagrar en REF
i required_tab
tabell, där listan över böcker kommer att lagras. För varje rad med course_material
, required_reading innehåller en REF till motsvarande rader i required_tab.
OBS
Butikstabellen (
required_tab
i exemplet ovan) kan finnas i ett annat schema och kan ha andra lagringsparametrar från huvudtabellen. Lagringstabellen kan beskrivas och finns iuser_tables
, men kan inte nås direkt.
Om du försöker fråga eller ändra lagringstabellen direkt får du Oracle-felet "ORA-22812:kan inte referera till den kapslade tabellkolumnens lagringstabell". Innehållet i butikstabellen manipuleras genom SQL i huvudtabellen.
Se även:
- Oracle PL/SQL – Samlingar (kapslade tabeller)