pl sql collections nested table
Impara le basi di raccolte PL SQL, metodi di raccolta, Varray, tabelle nidificate e array associativi con l'aiuto di esempi di codice:
Nel Sottoprogrammi PL / SQL tutorial di Serie PL / SQL , abbiamo appreso procedure e funzioni, diversi metodi di passaggio di parametri e come creare / eliminare procedure e funzioni in PL / SQL.
In questo articolo, discuteremo le raccolte PL SQL e i concetti correlati. Spiegheremo anche il concetto di Varray, tabelle annidate e tabelle indicizzate disponibili in PL / SQL.
Inoltre, esploreremo alcune delle eccezioni e dei metodi di raccolta incorporati.
Cosa imparerai:
- Collezioni PL SQL
- Tabelle annidate in PL / SQL
- Array associativo o tabelle index-by
- Varrays in PL / SQL
- Conclusione
Collezioni PL SQL
Una raccolta è un gruppo di elementi di tipi di dati omogenei. Generalmente comprende array, elenchi, set e così via. Ciascuno degli elementi ha un pedice particolare che riflette la sua posizione.
Le raccolte PL SQL sono dei seguenti tipi:
- Tabelle di array / indicizzazione associative
- Tabelle annidate.
- Varrays.
Le raccolte PL SQL vengono generalmente utilizzate per l'archiviazione e la manipolazione di grandi blocchi di dati, utilizzando la parola chiave BULK COLLECT in Oracle.
Metodi di raccolta
Pl / SQL ha alcuni metodi incorporati nella raccolta che sono elencati di seguito.
Sl. No. | Nome | Descrizioni |
---|---|---|
7 | successivo (m) | Fornisce l'indice che ha successo al mese. |
uno | contare | Fornisce il numero di elementi presenti nella raccolta. |
Due | limite | Verifica la dimensione della raccolta. |
3 | esiste (m) | Restituisce vero se l'm-esimo elemento presente nella raccolta altrimenti restituisce falso. |
4 | primo | Fornisce il numero di indice iniziale nella raccolta con pedice intero. |
5 | ultimo | Fornisce il numero di indice finale nella raccolta con pedice intero. |
6 | estendere | Aggiunge un elemento NULL alla fine della raccolta. |
8 | prima (m) | Fornisce l'indice che precede m index. |
9 | trim | Elimina un elemento dalla fine della raccolta. |
10 | assetto (m) | Elimina m elementi dalla fine della raccolta. |
undici | Elimina | Elimina tutti gli elementi dalla raccolta, impostando il conteggio su 0. |
12 | cancella (m) | Elimina il mesimo elemento dalla raccolta, se il mesimo elemento è NULL, non viene eseguita alcuna azione. |
13 | elimina (m, k) | Elimina l'elemento da mth a kth posizione. |
14 | estendere (m) | Aggiunge m elemento alla fine della raccolta. |
quindici | estendere (m, k) | Aggiunge m copie dell'elemento k-esimo alla fine della raccolta. |
Eccezioni raccolte
Alcune delle eccezioni di raccolta comuni sono le seguenti:
- VALUE_ERROR: Questa eccezione viene generata se un pedice non può essere convertito nel tipo di chiave o è NULL. Questa eccezione viene normalmente sollevata se una chiave è di tipo PLS_INTEGER intervallo e il pedice risiede oltre questo intervallo.
- NESSUN DATO TROVATO: Questa eccezione viene generata da PL / SQL se un'istruzione SELECT non recupera nessuna riga o un programma punta a un elemento che viene eliminato in una tabella nidificata. Questa eccezione può essere sollevata anche da un elemento non inizializzato in una tabella index-by.
- COLLECTION_IS_NULL: Questa eccezione viene generata da PL / SQL se la raccolta è NULL per impostazione predefinita.
- SUBSCRIPT_BEYOND_COUNT: Questa eccezione viene generata quando un pedice è superiore al conteggio totale del numero di elementi nella raccolta.
- SUBSCRIPT_OUTSIDE_LIMIT: Questa eccezione viene generata quando un pedice è oltre l'intervallo di soglia.
Tabelle annidate in PL / SQL
Le tabelle nidificate sono come una tabella di database a colonna singola o un array unidimensionale in cui la dimensione dell'array è dinamica. Il suo pedice è di tipo numerico. Possiamo ottenere la tabella annidata in una variabile assegnando alle righe un pedice che inizia con 1. Questa caratteristica lo rende simile per natura come un array.
Una tabella nidificata può essere contenuta in una colonna di un database. Può essere utilizzato anche per manipolare operazioni SQL unendo tabelle. Poiché è come un array dinamico, il limite superiore può essere di qualsiasi dimensione.
Una tabella annidata può avere caratteristiche di raccolta sia dense che sparse, il che significa che qualsiasi elemento può essere eliminato casualmente (rendendolo sparse) con l'aiuto della procedura DELETE. La cancellazione dei dati provoca una discontinuità nell'indice ma la funzione NEXT aiuta a iterare ai pedici successivi. Poiché i dati vengono memorizzati sotto forma di tabella, possono essere recuperati con l'aiuto delle istruzioni SELECT.
È possibile creare una tabella nidificata a livello di schema o in un blocco PL / SQL. È come un oggetto database accessibile all'interno del database o del sottoprogramma.
Le differenze tra Array e Nested table sono elencate di seguito:
- La dimensione delle tabelle nidificate può essere aumentata dinamicamente. Il limite superiore di un array è fisso ma non è fisso per le tabelle nidificate.
- L'array ha pedici consecutivi che lo rendono denso. Tuttavia, una tabella nidificata è densa al momento della creazione ma diventa scarsa una volta che gli elementi vengono eliminati nel mezzo.
Sintassi della tabella nidificata:
TYPE <> IS TABLE OF <> (NOT NULL);
Qui, 'genere' è l'identificatore del tipo. 'elemento' è il tipo di dati.
Implementazione del codice con la tabella nidificata:
DECLARE TYPE subject IS TABLE OF VARCHAR(15); TYPE teacher IS TABLE OF VARCHAR2(20); subjectnames subject; subjectteacher teacher; summ integer; BEGIN -- adding subject and its teachers to the table subjectnames := subject('PLSQL', 'SELENIUM', 'JMETER'); subjectteacher:= teacher('Sashi', 'Mala', 'Mukund'); -- returns count of number of elements in nested table summ:= subjectteacher.count; -- printing the content to the console dbms_output.put_line('Total Number of Teachers: '|| summ); FOR i IN 1 .. summ LOOP dbms_output.put_line('Subject:'||subjectnames(i)||', Teacher:' || subjectteacher(i)); end loop; END;
L'output del codice precedente dovrebbe essere:
Array associativo o tabelle index-by
La tabella index-by è comunemente chiamata array associativo. In termini di struttura, sia la tabella index-by che le tabelle annidate sono simili e hanno un pedice per accedere agli elementi.
Un array associativo è rappresentato da una coppia chiave-valore. Ciascuna delle chiavi univoche viene utilizzata per identificare il valore nella matrice. Il tipo di dati della chiave può essere una stringa o un numero intero definito durante la creazione. Una chiave viene aggiunta alla tabella index-by semplicemente assegnando un valore per la prima volta. Per modificare la stessa voce, dobbiamo utilizzare la stessa chiave.
La chiave dovrebbe essere unica o come chiave primaria in una tabella o combinando stringhe insieme per sviluppare un valore univoco. Questo tipo di raccolta ha una dimensione di matrice dinamica e presenta caratteristiche sparse o dense. Una differenza tra la tabella index-by e la tabella nidificata è che la prima non può essere memorizzata nella colonna del database ma la tabella nidificata può essere memorizzata.
Gli array associativi forniscono una facile manutenzione del pedice e vengono creati all'interno di un blocco PL / SQL. È come una tabella SQL in cui i valori vengono ottenuti con l'aiuto della chiave primaria. Viene generalmente utilizzato per l'archiviazione temporanea dei dati e può essere utilizzato al posto delle tabelle SQL per evitare il traffico di rete e l'archiviazione su disco richiesti dalle tabelle SQL.
Poiché gli array associativi non memorizzano dati persistenti, non possono essere utilizzati con istruzioni SQL come SELECT e INSERT. Tuttavia, possono essere resi infiniti per una sessione del database dichiarando il loro tipo di dati come un pacchetto e definendoli all'interno del corpo del pacchetto.
Sintassi della tabella index-by:
TYPE type IS TABLE OF element (NOT NULL) INDEX BY (BINARY_INTEGER | PLS_INTEGER | VARCHAR2(size)); INDEX BY key;
Qui, il 'chiave' è numerico. Può essere BINARY_INTEGER o PLS_INTEGER. Il tipo di dati può essere varchar, varchar2, long o string. La chiave basata su varchar dovrebbe essere menzionata con length.
'elemento' è il tipo di dati.
'taglia' è il numero massimo di elementi. È un numero intero positivo.
'genere' è l'identificatore del tipo.
Implementazione del codice con la tabella index-by:
DECLARE TYPE age IS TABLE OF NUMBER INDEX BY VARCHAR(25); age_empl age; employee VARCHAR(25); BEGIN -- adding employee details to the table age_empl('Sam') := 30; age_empl('Venu') := 35; -- printing the table contents in the console employee := age_empl.FIRST; WHILE employee IS NOT null LOOP dbms_output.put_line ('Employee name is ' || employee || ' and age is ' || TO_CHAR(age_empl(employee))); employee := age_empl.NEXT(employee); END LOOP; END; /
L'output del codice precedente dovrebbe essere:
Varrays in PL / SQL
I Varray memorizzano un numero fisso di elementi e sono come un array unidimensionale. Tuttavia, il numero di elementi può essere modificato in fase di esecuzione. È un insieme consecutivo di elementi di tipi di dati simili. Può essere memorizzato in una tabella di database che può essere gestita con l'aiuto di istruzioni SQL. Ma il processo non è così semplice e flessibile come in una tabella annidata.
La dimensione massima di Varray è definita nella definizione del tipo. Ha una disposizione di memoria una dopo l'altra che inizia con 1 pedice e l'indirizzo di posizione più basso punta all'elemento iniziale e l'indirizzo di posizione più alto punta all'elemento finale. Tutti gli elementi di un Varray sono identificati da un indice.
Questo tipo di raccolta ha un pedice numerico e ha caratteristiche dense. Pertanto gli elementi dell'array non possono essere eliminati in mezzo. O l'intero Varray dovrebbe essere cancellato o la sua estremità può essere tagliata. A causa delle sue caratteristiche dense, ha una minore flessibilità di utilizzo.
Il Varray può essere creato all'interno di un blocco PL / SQL oa livello di schema. Viene trattato come un oggetto database a cui è possibile accedere all'interno del database o all'interno di un sottoprogramma. Varray viene utilizzato più frequentemente quando la dimensione dell'array è nota. Dovrebbe essere inizializzato prima di usarli e può essere inizializzato con l'aiuto di un costruttore. Il suo valore è NULL quando dichiarato e deve essere inizializzato prima di fare riferimento ai suoi elementi.
Sintassi di Varray:
TYPE <> IS VARYING ARRAY (<>) OF <> (NOT NULL);
Qui,
'genere' è l'identificatore del tipo.
'elemento' è il tipo di dati.
'taglia' è il numero massimo di elementi in un array. È un numero intero positivo.
Dichiarazione e inizializzazione delle variabili Varray
Dopo aver creato un Varray, possiamo dichiararlo nel modo descritto di seguito:
Sintassi:
name type_n (:= type_n(...));
Qui,
'nome' è il nome Varray.
'Tipo_n' è il tipo di Varray.
'Tipo_n (...)' è il costruttore di tipo Varray. Gli elenchi di argomenti sono menzionati da un separatore virgola e di tipo Varray.
Dobbiamo inizializzare una variabile Varray prima di usarla altrimenti dà un errore di raccolta non inizializzato. L'inizializzazione viene eseguita nel modo descritto di seguito.
Sintassi:
name type_n := type_n();
Questo inizializzerà la variabile con zero elementi. Per popolare gli elementi nelle variabili varray, la sintassi è:
name type_n := type_n(e1, e2, ...);
Accesso agli elementi di Varray
È possibile accedere agli elementi tramite il processo descritto di seguito:
nome (m); dove m è l'indice dell'elemento che inizia con 1 e termina con il conteggio massimo del numero di elementi di tipo Varray. Nel caso in cui m sia oltre l'intervallo di 1 e il conteggio massimo del numero di elementi, SUBSCRIPT_BEYOND_COUNT l'eccezione viene generata da PL / SQL.
La dimensione di Varray può essere modificata con l'aiuto dell'istruzione ALTER.
Implementazione del codice con ALTER.
CREATE Or REPLACE TYPE names AS VARRAY(2) OF VARCHAR(5); /
L'output del codice precedente dovrebbe essere.
strumenti per la distribuzione continua in devops
Implementazione del codice con Varray:
DECLARE type countrynames IS VARRAY(3) OF VARCHAR2(50); type currency IS VARRAY(3) OF VARCHAR2(15); country countrynames; cur currency; addition integer; BEGIN -- adding country and its currency to the table country := countrynames('INDIA', 'USA', 'UK'); cur:= currency('INR', 'DOLLAR', 'POUND'); -- returns count of number of countries in varray addition := country.count; -- printing the content to the console dbms_output.put_line('Total Number of countries : '|| addition); FOR i in 1 .. addition LOOP dbms_output.put_line('Country: ' || country(i) || ' ,Currency : ' || cur(i)); END LOOP; END; /
L'output del codice precedente dovrebbe essere:
Differenze tra Varray e tabelle annidate
Le differenze sono le seguenti:
- Mentre stiamo lavorando su uno scenario in cui il numero di elementi è noto e sono disposti in sequenza, vengono generalmente utilizzati i Varray. Un Varray che è memorizzato in un database mantiene i suoi pedici e la sequenza. Viene sempre mantenuto come un unico oggetto. Mentre le tabelle nidificate vengono utilizzate quando il conteggio del numero di elementi non è limitato.
- La tabella annidata ha caratteristiche sparse che le consentono di rimuovere qualsiasi elemento da qualsiasi posizione e non sempre dalla fine. L'ordine e il pedice di una tabella nidificata non vengono mantenuti quando viene archiviata nel database. Gli elementi di Varray vengono sempre mantenuti in sequenza.
Differenze tra array associativi e tabelle nidificate
Le differenze sono le seguenti:
- Le tabelle nidificate possono essere memorizzate in una colonna del database, ma gli array associativi non lo sono. Le tabelle nidificate mantengono relazioni di dati corrette che vengono archiviate in modo persistente.
- Gli array associativi sono utili per piccole tabelle di ricerca in cui la raccolta può essere compilata in memoria ogni volta che viene inizializzato un pacchetto o viene chiamata una procedura. Sono una buona scelta quando la dimensione non è nota in anticipo. I valori di indice di un array associativo sono flessibili poiché gli indici di questo array non sono in sequenza o possono essere negativi o una stringa invece di un numero.
Domande e risposte frequenti
D # 1) Perché utilizziamo le raccolte in PL / SQL?
Risposta: Esistono tre tipi di raccolte: tabelle nidificate, array associativi e Varray. Le tabelle nidificate possono memorizzare un numero casuale di elementi. Varrays può memorizzare un numero fisso di elementi e gli array associativi ci consentono di cercare elementi con numeri e stringhe casuali.
D # 2) Qual è la tabella nidificata in PL / SQL?
Risposta: Una tabella nidificata è di natura monodimensionale e le sue dimensioni non rimangono fisse. È possibile accedervi nei blocchi SQL e PL / SQL. Può essere utilizzato in record, definizioni di oggetti e tabelle.
D # 3) Che cos'è una raccolta in blocco in Oracle PL / SQL?
Risposta: Una raccolta in blocco è un metodo per ottenere dati quando il motore PL / SQL informa il motore SQL di accumulare più righe contemporaneamente e memorizzarle in una raccolta.
D # 4) Perché la raccolta in blocco è più veloce in Oracle?
Risposta: La raccolta in blocco migliora le prestazioni riducendo l'interazione tra il motore PL / SQL e il database.
D # 5) Cos'è Varray in PL / SQL?
Risposta: È una struttura dati PL / SQL che viene utilizzata per memorizzare una raccolta omogenea di elementi dello stesso tipo di dati in una sequenza. Viene utilizzato principalmente per contenere un insieme ordinato di dati.
Q # 6) Possiamo eliminare l'elemento da Varray in Oracle?
Risposta: Non è possibile modificare o eliminare elementi in un Varray direttamente con l'aiuto di istruzioni SQL. Dobbiamo selezionare il Varray dalla tabella, modificarlo in PL / SQL, quindi modificare la tabella e memorizzarlo in un nuovo Varray.
D # 7) Qual è la differenza tra la tabella annidata e Varray?
Risposta: le differenze sono elencate di seguito:
- Prendiamo il Varray quando il numero di elementi è noto da prima. Questa restrizione non è possibile nelle tabelle nidificate.
- In Varray, gli elementi vengono utilizzati in sequenza. La tabella nidificata ha caratteristiche sia dense che sparse.
- Gli elementi sono sempre ordinati in Varray. Gli elementi possono o non possono essere in ordine nella tabella annidata.
Conclusione
In questo tutorial, abbiamo discusso in dettaglio alcuni dei concetti di base di PL / SQL che sono essenziali per sviluppare la conoscenza su di esso.
Abbiamo trattato i seguenti argomenti elencati di seguito:
- Comprensione di base delle raccolte PL SQL (metodi ed eccezioni).
- Varrays.
- Tabelle annidate
- Tabelle indicizzate
<< PREV Tutorial | PROSSIMO Tutorial >>
Lettura consigliata
- Tipi di dati array: int Array, Double array, Array of Strings Etc.
- Java Array - Come stampare elementi di un array in Java?
- Tutorial PL SQL per principianti con esempi | Cos'è PL / SQL
- Array Java: dichiara, crea e inizializza un array in Java
- Tutorial sulla lunghezza di array Java con esempi di codice
- Differenze esatte tra SQL e NoSQL e sapere quando utilizzare NoSQL e SQL
- Differenza tra SQL Vs MySQL Vs SQL Server (con esempi)
- Classe nidificata JUnit 5: Tutorial @Nested con esempi