sql >> Databasteknik >  >> RDS >> Oracle

Oracle PL/SQL-samlingar - Skapa kapslade tabeller i databasen

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 i user_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)
  1. Hur lägger jag till en referens till MySQL-anslutningen för .NET?

  2. Hur FLOOR() fungerar i MariaDB

  3. Hur använder jag cascade delete med SQL Server?

  4. Hur lägger jag till en anpassad CHECK-begränsning på en MySQL-tabell?