In Oracle kan een geneste tabel worden opgeslagen als een databasekolom. Dit betekent dat de hele geneste tabel zich in één rij van de databasetabel bevindt en dat elke rij van de database een andere geneste tabel kan bevatten. Om een geneste tabel in de database op te slaan, moet u de CREATE TYPE
. gebruiken statement om het geneste tabeltype te maken in plaats van een typestatement in een PL/SQL-blok.
Door CREATE TYPE
. te gebruiken , het type wordt opgeslagen in de datadictionary en is dus beschikbaar voor gebruik als kolomtype. Het volgende voorbeeld illustreert hoe u een geneste tabel als databasekolom kunt maken.
Oracle PL/SQL - Geneste tabel in de database maken
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;
Er zijn verschillende dingen om op te merken over de bovenstaande lijst en het maken van geneste tabellen in de database:
- Het tabeltype is ontworpen met het
CREATE TYPE
statement zodat het kan worden opgeslagen in de datadictionary. - Het tabeltype wordt gebruikt in de tabeldefinitie, net als een kolomobject.
- Voor elke geneste tabel in een bepaalde databasetabel, de
NESTED TABLE
clausule is vereist. Deze clausule geeft de naam van de winkeltabel aan.
Een winkeltabel is een door het systeem gegenereerde tabel die wordt gebruikt om de feitelijke gegevens in de geneste tabel op te slaan. Deze gegevens worden niet inline opgeslagen met de rest van de tabelkolommen; het wordt apart opgeslagen.
De required_reading
kolom zal een REF
. opslaan in het required_tab
tabel, waar de lijst met boeken wordt opgeslagen. Voor elke rij course_material
, required_reading bevat een REF naar de corresponderende rijen in required_tab.
OPMERKING
De winkeltabel (
required_tab
in het bovenstaande voorbeeld) kan voorkomen in een ander schema en kan andere opslagparameters hebben dan de hoofdtabel. De winkeltabel kan worden beschreven en bestaat inuser_tables
, maar kan niet rechtstreeks worden geopend.
Als u probeert de winkeltabel rechtstreeks op te vragen of te wijzigen, krijgt u de Oracle-fout "ORA-22812:kan niet verwijzen naar de opslagtabel van geneste tabelkolom". De inhoud van de winkeltabel wordt gemanipuleerd via SQL in de hoofdtabel.
Zie ook:
- Oracle PL/SQL – Verzamelingen (geneste tabellen)