Oracle
 sql >> Datenbank >  >> RDS >> Oracle

FORALL-Anweisung mit gebundener INDICES-OF-Klausel in der Oracle-Datenbank

Warum FORALL-Anweisung mit INDICES OF Bound-Klausel?

Die FORALL-Anweisung mit Lower &Upper Bound-Klausel ist wahrscheinlich die einfachste Art der Massendatenverarbeitung, bis wir auf eine dichte Sammlung verweisen. Wenn es um eine spärliche Sammlung geht, ist die Lower &Upper Bound-Klausel nicht stark. Außerdem sind die Chancen, mit einer dichten Sammlung zu arbeiten, leider im realen Leben viel geringer als mit einer spärlichen Sammlung.

Wie auch immer, wenn Sie neugierig sind, dann haben wir eine Demonstration gemacht. Sehen Sie sich hier im Video auf unserem YouTube-Kanal an, was passiert, wenn wir die Unter- und Obergrenze der FORALL-Anweisung mit spärlicher Sammlung verwenden.

Der Nachteil der Unter- und Obergrenzenklausel der FORALL-Anweisung besteht darin, dass sie nicht mit einer Sparse-Sammlung verwendet werden kann. Dieses Manko kann leicht durch die Verwendung von Optionen wie „Indices-of“ behoben werden “ oder „Werte von ’ gebundene Klausel. In diesem Tutorial dreht sich alles um die erste Option.

INDICES-OF-Bound-Klausel

Ähnlich wie die Lower &Upper Bound-Klausel hilft uns die INDICES-OF-Klausel bei der Massendatenverarbeitung, indem sie uns die Sammlung durchlaufen lässt. Der einzige Unterschied besteht darin, dass wir mit der INDICES OF-Klausel sowohl eine dichte als auch eine spärliche Sammlung durchlaufen können. Wohingegen Lower &Upper Bound Clause nur mit einer dichten Sammlung funktioniert.

Syntax der gebundenen INDICES OF-Klausel

FORALL index IN INDICES OF collection_variable
[SAVE EXCEPTION]
DML statements; 

Wo:

FORALL ist ein reserviertes Schlüsselwort der Oracle-Datenbank, gefolgt von einem Index. Dieser Index ist ein implizit definierter Schleifenzähler, der von der PL/SQL-Engine deklariert wird. Danach müssen Sie ein weiteres Schlüsselwort schreiben, das IN ist. Gefolgt vom Schlüsselwort IN haben wir unsere gebundene Klausel, die INDICES OF.

ist

Unmittelbar nach dem Schreiben des reservierten Ausdrucks „INDICES OF“ müssen wir die Sammlungsvariable der Sammlung angeben, deren Daten wir verwenden möchten. Wir wissen bereits, dass wir die Sammlung im Programm über ihre Sammlungsvariable referenziert haben. Danach haben wir die Option SAVE EXCEPTION, dies ist eine optionale Auswahl. Dann haben wir eine DML-Anweisung, dies könnte eine beliebige DML-Anweisung oder eine MERGE-Anweisung sein.

Stellen Sie sicher, dass die DML-Anweisung oder die MERGE-Anweisung, die Sie mit FORALL verwenden, auf eine Sammlung verweisen muss. Auch eine FORALL-Anweisung kann nur eine DML- oder eine MERGE-Anweisung auf einmal verarbeiten.

Beispiel einer gebundenen INDICES OF-Klausel

Hier sehen wir eine Demonstration der gebundenen INDICES OF-Klausel mit der FORALL-Anweisung. Hier holen wir die Daten aus einer bereits initialisierten dünn verschachtelten Tabelle und speichern sie in einer Tabelle.

Wie wir im vorherigen Tutorial gelernt haben, nimmt die FORALL-Anweisung die Daten aus der Sammlung und speichert sie in einer Tabelle. Daher erstellen wir zunächst eine Tabelle.

SET SERVEROUTPUT ON;
CREATE TABLE tut_78(
    mul_tab NUMBER(5)
);

Um die Demonstration einfach zu halten, haben wir eine sehr einfache Tabelle mit dem Namen tut_78 erstellt. Diese Tabelle hat nur eine Spalte mul_tab vom Datentyp NUMBER.

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);
    --Another variable for holding total number of record stored into the table 
    tot_rec NUMBER;
BEGIN
    var_nt.DELETE(3, 6);
    
    FORALL idx IN INDICES OF var_nt
        INSERT INTO tut_78 (mul_tab) VALUES (var_nt(idx));
        
    SELECT COUNT (*) INTO tot_rec FROM tut_78;
    DBMS_OUTPUT.PUT_LINE ('Total records inserted are '||tot_rec);
END;
/

Die ausführliche Erklärung des obigen Codes finden Sie im Video-Tutorial. Aber lassen Sie uns auch hier noch eine kurze Erklärung haben.

Deklarationsabschnitt des obigen PL/SQL-Blocks

Hier in diesem Abschnitt haben wir zunächst eine verschachtelte Tabelle mit dem Namen „my_nested_table“ erstellt ’. Es enthält die Daten des Datentyps NUMBER. Dann haben wir seine Sammlungsvariable ‚var_nt deklariert ’. Damit haben wir die ersten 10 Indizes initialisiert, indem wir 10 numerische Elemente in unserer Sammlung gespeichert haben.

Neben Nested Table und seiner Sammlungsvariable haben wir auch eine zusätzliche Variable „tot_rec“ deklariert ’ vom Datentyp Zahl. Diese Variable wird verwendet, um die Gesamtzahl der Daten zu speichern, die in der Tabelle gespeichert werden.

Ausführungsabschnitt

Wenn Sie sich die erste Anweisung im Ausführungsabschnitt ansehen. Sie werden feststellen, dass ich mit der Sammlungsmethode DELETE Daten von Index 3 bis Index 6 gelöscht habe. Das bedeutet, dass der Index unserer Sammlung jetzt nicht sequenziell gefüllt wird. Das ändert die Art unserer Kollektion von DENSE zu SPARSE.

Direkt nach dem DELETE-Aufruf der Erfassungsmethode haben wir unsere FORALL-Anweisung mit der gebundenen Klausel INDICES OF. Mit dieser Anweisung fügen wir in die Collection ‚my_nested_table‘ in die Tabelle tut_78 ein.

Dann haben wir eine SELECT-INTO-Anweisung. Diese Anweisung gibt die Gesamtzahl der in die Tabelle tut_78 eingefügten Zeilen zurück und speichert diesen Wert in der Variablen tot_rec. Dann zeigen wir mit der DBMS_OUTPUT-Anweisung den in der Variablen tot_rec gespeicherten Wert mit einer formatierten Zeichenfolge für den Benutzer an.

Ich empfehle Ihnen dringend, sich dieses Tutorial auf meinem YouTube-Kanal anzusehen, um eine ausführliche Erklärung des oben besprochenen Codes zu erhalten. Vergessen Sie auch nicht, den Kanal für weitere interessante Tutorials zu abonnieren.

Danke, das ist ein PL/SQL-Tutorial zur Massendatenverarbeitung mit der FORALL-Anweisung mit der gebundenen INDICES OF-Klausel. Ich hoffe, Sie hatten Spaß beim Lesen, wenn ja, dann teilen Sie diesen Blog in Ihren sozialen Medien. Ich wünsche Ihnen einen schönen Tag!