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

Collezione PL/SQL:tabella annidata nel database Oracle

Come creare una tabella nidificata all'interno del blocco PL/SQL

Benvenuti nel secondo tutorial della serie PL/SQL Collection. In questo tutorial impareremo il primo tipo di raccolta che è "Tabella nidificata". Una tabella all'interno di una tabella è la definizione più semplice che si possa inventare ed è corretta in ogni modo perché una tabella incorporata all'interno di un'altra tabella è esattamente ciò che suggerisce il nome tabella nidificata.

Ma, se dobbiamo definire la collezione "Tavolo Nested" in un modo più sofisticato e tecnico, allora possiamo dire che i tavoli Nested sono strutture unidimensionali che sono persistenti e di natura illimitata. Sono accessibili sia in SQL che in PL/SQL e possono essere utilizzati in tabelle, record e definizioni di oggetti. Poiché è una raccolta PL/SQL illimitata, può contenere un numero qualsiasi di elementi in un insieme ordinato casuale.

Definizione
Le tabelle nidificate sono strutture unidimensionali di natura persistente e illimitata. Sono accessibili sia in SQL che in PL/SQL e possono essere utilizzati in tabelle, record e definizioni di oggetti. Poiché è una raccolta PL/SQL illimitata, può contenere un numero qualsiasi di elementi in un insieme non ordinato.

Lettura consigliata:Introduzione alla raccolta PL/SQL

Una tabella nidificata può essere creata all'interno del blocco PL/SQL o nel database come oggetto di tipo raccolta (Oggetto Schema). Nel caso della precedente tabella nidificata si comporta come un array unidimensionale senza alcun tipo di indice o limite superiore.

Quindi per il momento concentriamoci su come creare una tabella nidificata all'interno del blocco PL/SQL e lasciamo il resto per il prossimo tutorial.

Sintassi per la creazione di tabelle nidificate

DECLRE 
TYPE nested_table_name IS TABLE OF element_type [NOT NULL];

Ho spiegato questa sintassi in dettaglio nel mio video tutorial sul mio canale YouTube. Ti consiglio vivamente di fare riferimento a quel video.

Esempio:come creare una tabella nidificata all'interno di un blocco PL/SQL?

L'esempio seguente serve solo a dimostrare come creare una tabella nidificata, non c'è niente di stravagante.

SET SERVEROUTPUT ON;
DECLARE
   TYPE my_nested_table   IS TABLE OF number;
    var_nt  my_nested_table :=  my_nested_table (9,18,27,36,45,54,63,72,81,90);
BEGIN
   DBMS_OUTPUT.PUT_LINE ('Value Stored at index 1 in NT is ' ||var_nt (1)); 
   DBMS_OUTPUT.PUT_LINE ('Value Stored at index 2 in NT is ' ||var_nt (2));
   DBMS_OUTPUT.PUT_LINE ('Value Stored at index 3 in NT is ' ||var_nt (3));
END;
 /

L'esempio sopra è molto semplice in cui abbiamo creato una tabella nidificata e l'abbiamo chiamata "my_nested_table" (riga numero 3). Nella riga successiva (riga numero 4) abbiamo creato un'istanza della stessa raccolta e l'abbiamo utilizzata per inizializzare la tabella nidificata e archiviarvi alcuni dati. Nella sezione di esecuzione accediamo ai dati memorizzati individualmente utilizzando il numero di indice, allo stesso modo in cui si faceva con gli array.

Invece di accedere ai dati uno per uno manualmente utilizzando l'indice, possiamo utilizzare i loop e scorrere ogni elemento della tabella nidificata della raccolta.

 SET SERVEROUTPUT ON;
 DECLARE
   TYPE my_nested_table   IS TABLE OF number;
   var_nt  my_nested_table :=  my_nested_table (9,18,27,36,45,54,63,72,81,90);
 BEGIN
   FOR i IN 1..var_nt.COUNT
   LOOP
     DBMS_OUTPUT.PUT_LINE ('Value stored at index '||i||'is '||var_nt(i));
   END LOOP;
 END;
 /

Questo è un altro esempio di come creare una tabella nidificata in cui scorriamo i dati e li mostriamo all'utente utilizzando For Loop.

Ecco come creare tabelle nidificate in blocchi PL/SQL. Resta sintonizzato perché nel prossimo tutorial impareremo come creare tabelle nidificate come oggetti di raccolta del database e quali viste del dizionario di dati puoi utilizzare per ottenere le informazioni sulle tabelle nidificate che sono archiviate nel tuo database.

È tutto. Grazie per la lettura e buona giornata!