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

Metodi di raccolta:prime e ultime funzioni nel database Oracle

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!