Massendatenverarbeitung mit FORALL-Anweisung
Ich weiß, dass das vorherige Tutorial eine kurze Pause von unserer Bulk Collect-Serie war. Schließlich war es die Forderung des Publikums und wir hatten die Verpflichtung, sie zu erfüllen. Aber keine Sorge, wir sind wieder auf Kurs. Sehen wir uns also die Einführung in die Massendatenverarbeitung mit der FORALL-Anweisung in Oracle Database an.
Falls Sie nicht wissen, von welchem Tutorial ich spreche, dann schauen Sie hier nach. Kommen wir also zum Thema.
Was ist eine FORALL-Anweisung?
Die FORALL-Anweisung hilft bei der optimierten Verarbeitung von Massendaten, indem DML-Anweisungen oder eine MERGE-Anweisung (wenn Sie 11g oder höher verwenden) in Stapeln von PL/SQL-Engine zu SQL-Engine gesendet werden.
Sie können eine FORALL-Anweisung auch als Massenschleifenkonstrukt definieren, das eine DML-Anweisung oder eine MERGE-Anweisung einmal oder mehrmals gleichzeitig ausführt.
Massenerfassung optimiert die Abfrage und steigert die Leistung durch Reduzierung der Kontextwechsel. FORALL macht dasselbe für DML-Anweisungen wie Insert, Delete, Update oder für eine MERGE-Anweisung.
Wie lautet die Syntax der FORALL-Anweisung?
Die Syntax ist ziemlich einfach, werfen wir einen Blick darauf.
FORALL index IN bound_clauses [SAVE EXCEPTION] DML statement;
Wo:
FORALL ist das von Oracle reservierte Schlüsselwort.
Index ist ein implizit definierter Schleifenzähler, der von der PL/SQL-Engine als PLS_INTEGER deklariert wird. Da es implizit von der PL/SQL-Engine definiert wird, brauchen Sie es nicht zu definieren. Der Gültigkeitsbereich von Index ist auf die FORALL-Anweisung beschränkt, in der er definiert ist.
Bound_Clauses sind die Klauseln, die die Anzahl der Schleifeniterationen steuern. Auch der Wert des Index ist davon abhängig. Es gibt drei Arten von gebundenen Klauseln in Oracle PL/SQL, die wir später in diesem Tutorial separat besprechen werden.
AUSNAHME SPEICHERN ist eine optionale Auswahl, die die FORALL-Anweisung auch dann weiterlaufen lässt, wenn die DML-Anweisung eine Ausnahme verursacht. Diese Ausnahmen werden in einem Cursorattribut namens SQL%Bulk_Exceptions.
gespeichert
Info:
Aufgrund von SAVE EXCEPTION wird die FORALL-Anweisung nicht abrupt beendet, selbst wenn eine Ausnahme vorliegt. Dies ist ein Vorteil der FORALL-Anweisung gegenüber der FOR-Schleife.
DML-Anweisung :Die DML-Anweisung kann eine beliebige DML-Anweisung wie INSERT, UPDATE oder DELETE sein. Wenn Sie Oracle 11g oder höher verwenden, können Sie auch die MERGE-Anweisung mit FORALL verwenden. Aber Sie müssen sicherstellen, dass Ihre DML-Anweisung oder die MERGE-Anweisung mindestens eine Sammlung in ihrer VALUES- oder WHERE-Klausel referenzieren muss.
Darüber hinaus können wir im Gegensatz zur FOR-Schleife mit der FORALL-Anweisung jeweils nur eine DML verwenden. Das ist das Manko von FORALL.
Ist FORALL eine Schleife wie die FOR-Schleife?
Nein, obwohl die FORALL-Anweisung alle Zeilen einer Sammlung durchläuft, ist es keine FOR-Schleife. Wenn Sie sich die Syntax genau angesehen haben, müssen Sie bemerkt haben, dass der Block der FORALL-Anweisung im Gegensatz zu „FOR Loop“ weder mit dem Schlüsselwort LOOP beginnt noch mit dem Schlüsselwort END LOOP endet.
Können wir Insert und Update DML gleichzeitig mit FORALL ausführen?
Nein, leider können wir im Gegensatz zu FOR Loop mit FORALL nicht mehr als eine DML gleichzeitig ausführen. Das bedeutet, dass Sie entweder Insert oder Update gleichzeitig ausführen können, nicht beide zusammen. Das ist ein Manko der FORALL-Anweisung.
Was ist das Cursorattribut SQL%Bulk_Exceptions?
Das Cursorattribut SQL%Bulk_Exceptions ist eine Sammlung von Datensätzen, die zwei Felder Error_Index und Error_Code hat. Error_Index speichert die Anzahl der Iterationen der FORALL-Anweisung, in deren Verlauf die Ausnahme aufgetreten ist. Andererseits speichert Error_Code den Ausnahmecode, der der ausgelösten Ausnahme entspricht.
Können wir die Anzahl der Ausnahmen sehen, die während der Ausführung der FORALL-Anweisung aufgetreten sind?
Sie können leicht überprüfen, wie viele Ausnahmen während der Ausführung der FORALL-Anweisung ausgelöst wurden, indem Sie SQL%BULK_EXCEPTION.COUNT.
verwendenWas sind diese gebundenen Klauseln? Erzählen Sie uns etwas über sie.
Wie oben erwähnt, steuern gebundene Klauseln den Wert des Schleifenindex und die Anzahl der Iterationen der FORALL-Anweisung. Es gibt drei Arten gebundener Klauseln, die mit der FORALL-Anweisung in Oracle Database verwendet werden können. Diese sind:
- Untere und obere Grenze
- Indizes von und
- Werte von
Die untere und obere Grenze :Ähnlich wie bei FOR LOOP müssen Sie in dieser gebundenen Klausel den gültigen Anfang und das Ende der fortlaufenden Indexnummern der referenzierten Sammlung angeben.
Es ist ein Muss, zusammen mit dieser gebundenen Klausel einen gültigen Bereich fortlaufender Indexnummern für die Anzahl der Sammlungen anzugeben, auf die in der DML-Anweisung verwiesen wird. Es besteht jedoch die Möglichkeit eines Fehlers, wenn festgestellt wird, dass die Sammlung, auf die mit dieser Klausel verwiesen wird, spärlich ist. Der Fehler, den Sie erhalten, ist dieser:
ORA-22160: element at index [3] does not exist
Falls Ihre referenzierte Sammlung spärlich ist und Sie Oracle 10g oder höher verwenden, möchten Sie vielleicht die anderen beiden Optionen verwenden, nämlich „Indices-of“ und „Values-of“.
Die INDIZES VON :Die zweite gebundene Klausel, die uns zur Verfügung steht, ist „Indizes of“. Diese gebundene Klausel ermöglicht es unserer FORALL-Anweisung, eine dünnbesetzte Sammlung wie ein assoziatives Array oder eine verschachtelte Tabelle zu durchlaufen.
Empfohlene Lektüre:Einführung in die PL/SQL-Sammlung
Die WERTE VON :Die dritte gebundene Klausel ist Werte von. Die Option VALUES OF macht deutlich, dass die Werte der Elemente der angegebenen Sammlung des Schleifenzählers die Basis der Werte in der FORALL-Anweisung sind. Grundsätzlich ist diese Sammlung eine Gruppe von Indizes, die die FORALL-Anweisung durchlaufen kann. Darüber hinaus müssen diese Indizes nicht eindeutig sein und können in beliebiger Reihenfolge aufgelistet werden.
Falls Sie schneller lernen, indem Sie sich das Video-Tutorial ansehen, dann ist hier eine Erklärung, die die FORALL-Anweisung im Detail erklärt.
Wir werden in den zukünftigen Tutorials lernen, wie man all diese gebundenen Klauseln mit der FORALL-Anweisung verwendet, also bleiben Sie dran. Für die neuesten Updates können Sie meinen YouTube-Kanal abonnieren und mir in meinen sozialen Medien folgen.
Vielen Dank und einen schönen Tag!