Bentornati ancora una volta alla serie sui metodi di raccolta in Oracle Database. Finora in questa serie abbiamo trattato Collection Function Count ( ) e Collection Function Exist ( ). Spero ti sia piaciuto leggere. Oggi in questo tutorial PL/SQL impareremo i metodi di raccolta First ( ) e Last ( ).
Quali sono i metodi di raccolta FIRST ( ) e LAST ( )?
Utilizziamo le funzioni di raccolta First &Last per conoscere il primo e l'ultimo valore di indice definiti in una raccolta.
Possiamo utilizzare questi metodi di raccolta con qualsiasi tipo di raccolta?
Sì! Puoi utilizzare entrambe queste funzioni con tutti e tre i tipi di raccolte che sono Associative Array, Nested table e VARRAY.
Quando il metodo di raccolta FIRST ( ) e LAST ( ) restituisce null?
Entrambe le funzioni restituiscono null quando applicate a una raccolta vuota o quando applicate a una raccolta inizializzata che non ha elementi.
Puoi elencare le specifiche della funzione per entrambe queste funzioni?
Sicuro! Perchè no. La specifica per la funzione di raccolta FIRST ( ) è:
FUNCTION FIRST RETURN PLS_INTEGER | VARCHAR2
E la specifica della funzione per la funzione di raccolta LAST ( ) è:
FUNCTION LAST RETURN PLS_INTEGER | VARCHAR2
Informazioni:
Per array associativi indicizzati a stringhe, questi metodi restituiscono stringhe; "più basso" e "più alto" sono determinati dall'ordine del set di caratteri in uso in quella sessione.
Cosa succede se nel mio VARRAY è presente solo 1 elemento?
In tal caso la funzione di raccolta FIRST ( ) è sempre 1 e il metodo di raccolta LAST ( ) è sempre uguale a COUNT.
E se applicassi queste funzioni a una raccolta non inizializzata?
Voglio dire sul serio, perché dovresti farlo! Ad ogni modo, se hai applicato la funzione di raccolta FIRST &LAST a una raccolta non inizializzata, solleverà l'eccezione COLLECTION_IS_NULL.
Esempio:come utilizzare la funzione di raccolta FIRST e LAST con la raccolta?
SET SERVEROUTPUT ON; DECLARE TYPE nt_tab IS TABLE OF NUMBER; col_var nt_tab := nt_tab(10, 20, 30, 40, 50); BEGIN DBMS_OUTPUT.PUT_LINE ('First Index of the Nested table is ' || col_var.FIRST); DBMS_OUTPUT.PUT_LINE ('Last Index of the Nested table is ' || col_var.LAST); END; /
Nell'esempio sopra abbiamo creato una tabella annidata con il nome NT_TAB e l'abbiamo inizializzata usando la variabile di raccolta col_var. Questa tabella nidificata ha 5 indici in cui abbiamo archiviato i valori. L'indice più basso in questa tabella nidificata è 1 che contiene il valore 10 e l'indice massimo è 5 con il valore 50. Pertanto all'esecuzione il risultato dal primo DBMS_OUTPUT sarà 1 e dalla seconda istruzione DBMS_OUTPUT sarà 5.
Vai avanti, copia il codice e controlla tu stesso il risultato.
Cosa succede se cancelliamo il primo elemento della tabella nidificata? Quale sarà quindi l'output della funzione di raccolta FIRST?
Questa è un'ottima domanda! Se elimini il primo elemento della funzione di raccolta, la funzione di raccolta FIRST restituirà il pedice che è maggiore di 1 e contiene alcuni dati. Vediamo l'esempio:
SET SERVEROUTPUT ON; DECLARE TYPE nt_tab IS TABLE OF NUMBER; col_var nt_tab := nt_tab(10, 20, 30, 40, 50); BEGIN col_var.DELETE(1); DBMS_OUTPUT.PUT_LINE ('First Index after DELETE is ' || col_var.FIRST); END; /
Nell'esempio sopra abbiamo eliminato il primo elemento della tabella nidificata nt_tab utilizzando il metodo di raccolta DELETE. Dopo aver eliminato il primo elemento che è 10 sull'indice 1, il nuovo pedice più basso è ora 2 che contiene alcuni dati memorizzati. Quindi all'esecuzione il risultato sarà 2.
Cosa succede se elimino l'elemento dal centro della raccolta?
Se elimini i dati dal centro, la funzione di raccolta LAST restituirà un valore maggiore del valore restituito dal metodo COUNT.
Possiamo vedere i dati memorizzati negli indici della raccolta utilizzando il PRIMO e l'ULTIMO metodo di raccolta?
Quando stavo spiegando questo stesso concetto in una classe, una studentessa ha alzato la mano e me l'ha chiesto.
Signore, finora vediamo che queste funzioni restituiscono il numero di indice della collezione. E se volessimo vedere i dati archiviati in quegli indici. C'è un modo per vedere i dati memorizzati nell'indice utilizzando questi metodi di raccolta FIRST &LAST?
La risposta a questa domanda è sì! Naturalmente . Insieme al numero di pedice puoi utilizzare queste funzioni per vedere i dati memorizzati nell'indice più basso e più alto della raccolta.
Ad esempio
SET SERVEROUTPUT ON; DECLARE TYPE nt_tab IS TABLE OF NUMBER; col_var nt_tab := nt_tab(10, 20, 30, 40, 50); BEGIN -- This output statement will return 10 which is the value stored at the first index DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.FIRST)); -- This output statement will return 50 which is the value stored at the last index DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.LAST)); END; /
Per vedere i dati memorizzati nel primo e nell'ultimo indice devi solo inserire le chiamate di funzione di queste funzioni all'interno della parentesi della variabile di raccolta che è col_var proprio come abbiamo fatto nell'esempio precedente.
Ora la domanda è e se TAGLIAssimo la collezione? Quale sarà quindi l'output della funzione di raccolta LAST? Vai avanti e guarda il video tutorial dove ho spiegato quale sarà l'output del metodo di raccolta LAST quando taglierai la raccolta usando l'esempio.
Questo è tutto su questi metodi di raccolta. Spero che tu abbia trovato utile questo blog. Grazie e buona giornata!