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

Raccolte Oracle PL/SQL:crea tabelle nidificate nel database

In Oracle, una tabella nidificata può essere archiviata come colonna del database. Ciò significa che l'intera tabella nidificata è contenuta in una riga della tabella del database e ogni riga del database può contenere una tabella nidificata diversa. Per memorizzare una tabella nidificata nel database, è necessario utilizzare CREATE TYPE per creare il tipo di tabella nidificata, anziché un'istruzione di tipo in un blocco PL/SQL.

Usando CREATE TYPE , il tipo viene archiviato nel dizionario dei dati ed è quindi disponibile per l'uso come tipo di colonna. L'esempio seguente illustra come creare una tabella nidificata come colonna del database.

Oracle PL/SQL - Creazione di tabelle annidate nel database

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;

Ci sono diverse cose da notare sull'elenco sopra e sulla creazione di tabelle nidificate nel database:

  • Il tipo di tabella è progettato con CREATE TYPE istruzione in modo che possa essere memorizzata nel dizionario dei dati.
  • Il tipo di tabella viene utilizzato nella definizione della tabella, proprio come un oggetto colonna.
  • Per ogni tabella nidificata in una determinata tabella del database, il  NESTED TABLE è richiesta la clausola. Questa clausola indica il nome della tabella store.

Una tabella store è una tabella generata dal sistema che viene utilizzata per archiviare i dati effettivi nella tabella nidificata. Questi dati non vengono archiviati in linea con il resto delle colonne della tabella; viene memorizzato separatamente.

La required_reading la colonna memorizzerà un REF nella required_tab tabella, dove verrà archiviato l'elenco dei libri. Per ogni riga di course_material , required_reading contiene un REF alle righe corrispondenti in required_tab.

NOTA

La tabella del negozio (required_tab nell'esempio precedente) può esistere in un altro schema e può avere parametri di archiviazione diversi dalla tabella principale. La tabella store può essere descritta ed esiste in user_tables , ma non è possibile accedervi direttamente.

Se si tenta di interrogare o modificare direttamente la tabella di archiviazione, verrà visualizzato l'errore Oracle "ORA-22812:impossibile fare riferimento alla tabella di archiviazione della colonna della tabella nidificata". Il contenuto della tabella store viene manipolato tramite SQL sulla tabella principale.

Vedi anche:

  • Oracle PL/SQL – Raccolte (tabelle nidificate)