Wie kann ich Ausführungsplan für eine Oracle-Loop-Abfrage erzeugen wie unten:wie Ausführungsplan für Oracle-Schleife erzeugen
BEGIN
FOR L IN (SELECT FIRST_NAME, LAST_NAME, SOME_ID FROM TABLE1)
LOOP
INSERT INTO TABLE2 (FIRSTNAME, LASTNAME)
(SELECT FNAME, LASTNAME FROM TABLE2 WHERE SOME_ID = L.SOME_ID)
V_CNT := V_CNT + 1;
IF (MOD(V_CNT, 1000)=0) THEN
COMMIT;
END IF;
END LOOP;
Wie kann ich Ausführungsplan für einen Block wie oben erzeugen?
Ich fragte ähnliche Frage earlier und entschied, Blöcke aus meiner gespeicherten Prozedur zu extrahieren und Ausführungspläne für die einzelnen zu generieren. Obwohl ich weiß, wie man Pläne für einfache Abfragen generiert, weiß ich nicht, wie man sie für Schleifenblöcke wie oben erzeugt.
ok.Sagen wir, wenn ich die obige Abfrage aus einer Schleife nehme und es einfach nur eine Abfrage mache und den Ausführungsplan erzeuge. Wenn ich diesen Ausführungsplan analysieren würde, wäre es vergleichbar mit dem, wenn die gleiche Abfrage in einer Schleife ausgeführt wird und ein Insert jemals 1000 Recods festlegt? –
@learn_plsql: Ja, plus der Overhead des Umschaltens zwischen 'SQL' und' PL/SQL'. Warum benutzen Sie nicht einfach einen Join? – Quassnoi
oh das ist eine andere Geschichte über nicht mitmachen. Es fügt Millionen von Abfragen in die Tabelle ein, so dass wir von unserer dba angewiesen wurden (mehr wie aufgezwungen), Schleifen zu verwenden. –