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

Dichiarazione FORALL con clausola VALUES-OF vincolata nel database Oracle

Finora abbiamo imparato come utilizzare l'istruzione FORALL con una raccolta densa utilizzando la clausola Lower &Upper bound e una raccolta sparsa utilizzando la clausola INDICES OF bound. Cosa succede se si desidera utilizzare l'istruzione FORALL solo con elementi selezionati della raccolta? Possiamo farlo? Sì, possiamo farlo facilmente usando l'istruzione FORALL con la terza e ultima clausola vincolata che è "VALUES-OF".

Che cos'è una clausola vincolata "Values-of"?

L'istruzione FORALL riguarda l'associazione degli elementi della raccolta con una singola istruzione DML in modo ottimizzato. Usando la clausola vincolata "Values-of" dell'istruzione FORALL possiamo associare gli elementi selezionati della raccolta con l'istruzione DML.

Qual ​​è la sintassi della clausola vincolata "Values-of"?

Prima di capire come funzionano i valori della clausola vincolata, diamo un'occhiata alla sua sintassi e impariamo qual è il modo sintatticamente corretto di utilizzare la clausola "Values-of" con l'istruzione FORALL in Oracle Database.

FORALL idx IN VALUES OF indexing-collection
[Save exception]
DML/MERGE statement;

Informazioni:
Ricorda sempre che il nome della clausola è VALUES-OF non VALUE-OF. La scrittura di VALUE-OF causerà un errore che potrebbe terminare il programma.
VALORI DI diritto
VALORE DI sbagliato

Come funziona la clausola Values ​​of bound?

La clausola Values-of-bound richiederà due raccolte. La prima raccolta sarà la "Raccolta di origine" . Effettueremo operazioni DML come inserire, eliminare e aggiornare i dati di questa raccolta utilizzando l'istruzione FORALL.

La seconda raccolta sarà la "Raccolta di indicizzazione ' che specificherà il numero di indice degli elementi selezionati dalla prima raccolta. Questi elementi selezionati saranno gli elementi sui quali desideri eseguire le operazioni DML.

Poiché la clausola Values-of bound specifica che il valore della variabile Loop Index ("idx" nella sintassi precedente) dell'istruzione FORALL si basa sui valori dell'elemento nell'altra raccolta. Pertanto abbiamo indicato quell'altra raccolta come raccolta di indicizzazione nella sintassi di cui sopra.

Allora, cos'è questa raccolta di indicizzazione?

La raccolta di indicizzazione è un gruppo di indici che l'istruzione FORALL può scorrere. Questa raccolta potrebbe essere una raccolta densa e una raccolta sparsa. Inoltre, i numeri di indice memorizzati nella raccolta non devono essere univoci e possono essere elencati in un ordine arbitrario.

Ci sono restrizioni con la clausola Values-of di cui dovremmo essere a conoscenza?

Sì, ci sono alcune cose che devi sapere prima di lavorare con la clausola values-of bound in Oracle Database. Queste restrizioni sono –

  • La raccolta di indicizzazione deve essere una NESTED TABLE o un ASSOCIATIVE ARRAY.
  • Se la raccolta di indicizzazione è un array associativo, deve essere indicizzata da PLS_INTEGER o BINARY_INTEGER.
  • Gli elementi della raccolta di indicizzazione devono essere di PLS_INTEGER o BINARY_INTEGER.

Esempio di clausola Values-of bound con istruzione FORALL in Oracle Database:

Passaggio 1:crea una tabella

CREATE TABLE tut_79 (
    selected_data     NUMBER(5)
);

Passaggio 2:scrivi un blocco PL/SQL che dimostri come utilizzare la clausola Values-of con l'istruzione FORALL in Oracle Database.

SET SERVEROUTPUT ON;
DECLARE
    --Source collection
    TYPE My_NestedTable IS TABLE OF NUMBER;
    source_col My_NestedTable := My_NestedTable (9,18,27,36,45,54,63,72,81,90);
    
    --Indexing collection
    TYPE My_Array IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
    index_col My_Array;
BEGIN
    --Initializing indexing collection with the index numbers.
    index_col   (1) :=  3;
    index_col   (5) :=  7;
    index_col   (12):=  8;
    index_col   (28):=  10;
    --FORALL statement 
    FORALL idx IN VALUES OF index_col
        INSERT INTO tut_79 VALUES (source_col (idx));
END;
/

Puoi guardare la spiegazione dettagliata di questo codice nel video tutorial. Lì ho spiegato in dettaglio ogni singola riga di questo blocco PL/SQL.

Questo è il tutorial su come utilizzare la clausola Values-of bound con l'istruzione FORALL in Oracle Database. Spero che lo trovi utile. Per favore, condividi questo blog con i tuoi amici sui loro social media. Iscriviti anche al mio canale YouTube per tutorial più informativi e interessanti.

Grazie e buona giornata.