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

Metodo di raccolta:funzioni PRIOR e NEXT nel database Oracle

Come abbiamo visto nell'Introduzione ai metodi di raccolta PL/SQL, ci sono 7 funzioni di raccolta in Oracle Database. Tra queste sette funzioni abbiamo già appreso i primi cinque metodi. Prior e Next sono gli ultimi due metodi/funzioni di raccolta PL/SQL ancora da esplorare.

Pertanto, nel blog PL/SQL di oggi esploreremo in dettaglio questi due metodi di raccolta intatti.

Cosa sono le funzioni di raccolta precedente e successiva?

È sempre bene avere alcune funzioni sotto la manica che possono aiutarti a navigare tra i contenuti della tua collezione. La funzione Prior &Next potrebbe essere quelle funzioni.

Entrambe queste funzioni prendono un indice della raccolta come input e restituiscono il risultato.

Ad esempio, il metodo di raccolta PL/SQL PRIOR prende un indice come input e restituisce il valore memorizzato nell'indice più basso precedente. Mentre il metodo di raccolta NEXT restituisce il valore dall'indice successivo più alto.

Ci sono funzioni o procedure di raccolta precedente e successiva?

Sia Prior che Next sono funzioni.

Possiamo utilizzare entrambe queste funzioni con tutti e tre i tipi di raccolte?

Sì, entrambe le funzioni di raccolta Prior e Next possono essere utilizzate con tutti e tre i tipi di raccolte.

Quando i metodi di raccolta PL/SQL Prior e Next restituiranno null?

Metodo di raccolta Prior restituisce null quando non sono disponibili valori di pedice inferiori e il metodo di raccolta Next restituisce null quando non sono disponibili valori di pedice superiori da restituire.

In parole semplici possiamo dire che entrambe queste funzioni di raccolta restituiscono Null se vengono utilizzate rispettivamente con il Primo e l'Ultimo indice di una raccolta .

Quale sarà l'output del metodo Collection Next e Prior se li usiamo con array associativo?

Se i metodi di raccolta PRIOR e NEXT vengono utilizzati con array associativi, restituiranno un output di tipo di dati VARCHAR2 o LONG.

Ho sentito dire che questi metodi sollevano un qualche tipo di eccezione. È vero?

Si è vero. Se una di queste funzioni viene applicata a una tabella nidificata non inizializzata oa un Varray, genera l'eccezione COLLECTION_IS_NULL.

Puoi dimostrarci come utilizzare queste funzioni nel nostro codice?

Certo, perché no! Ti mostrerò l'applicazione delle funzioni di raccolta Prior e Next con l'aiuto di un codice molto semplice.

Esempio di metodo di raccolta Prior.

In questo metodo impareremo come utilizzare il metodo di raccolta Prior con Nested Table.

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('Index prior to index 3 is '||var_nt.PRIOR(3)); 
        dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
END;
/

Nel blocco PL/SQL anonimo sopra, abbiamo due istruzioni di output con "Chiamata di funzione prioritaria". La prima istruzione di output restituirà il numero di indice prima del numero di indice 3 che contiene un valore memorizzato. Nel nostro caso l'indice prima dell'indice numero 3 è 2. Quindi 2 sarà l'output della prima istruzione di output.

Nella seconda istruzione di output abbiamo chiamato la funzione Prior e l'abbiamo fornita come input per l'oggetto di raccolta.

var_nt(var_nt.PRIOR(3)) 

Il motore Oracle eseguirà prima la funzione Collection Prior (chiamiamola parte 1) e utilizzando il risultato della parte 1 eseguirà quindi l'oggetto raccolta (chiamiamola parte 2) e produrrà il risultato finale che sarà 18 nel nostro caso. Vai avanti, copia il codice e prova a eseguirlo da solo.

Cosa accadrà se eliminiamo l'indice più basso precedente dalla tabella nidificata?

Quindi ora la domanda è:cosa accadrà se elimini l'indice più basso precedente che è 2 nel nostro codice. In tal caso, il risultato non sarà sicuramente lo stesso. La funzione Prior restituisce l'indice più basso precedente. Ma quell'indice deve contenere un valore.

Prova tu stesso. Ecco il codice.

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
        var_nt.DELETE(2);
        dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); 
        dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
END;
/

Esempio di metodo di raccolta successivo.

Puoi usare il metodo di raccolta PL/SQL Next come hai usato la funzione Prior nel codice sopra. Il metodo di raccolta NEXT restituisce il valore dall'indice successivo più alto. Ecco l'esempio

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('Next Higher Index to index 3 is '||var_nt.NEXT(3)); 
        dbms_output.put_line('Value after 3rd Index is '||var_nt(var_nt.NEXT(3))); 
END;
/

Entrambi gli esempi sono quasi gli stessi tranne la chiamata alla funzione di raccolta. Nella sezione di esecuzione di questo blocco PL/SQL abbiamo di nuovo due istruzioni di output. La prima istruzione di output restituirà il successivo numero di indice non vuoto mentre la seconda restituirà i dati archiviati in quell'indice. Il funzionamento di entrambe queste affermazioni sarà lo stesso di cui abbiamo discusso sopra. Vai avanti e copia il codice e guarda l'output.

Questo è stato il tutorial dettagliato sul metodo di raccolta PL/SQL Next e Prior. Spero ti sia piaciuto leggere e imparato qualcosa di nuovo. Assicurati di condividere questo blog sui tuoi social media. Per condividere questo blog sul tuo Facebook clicca qui e per twitter clicca qui.

Grazie e buona giornata!