Ich habe eine gespeicherte Prozedur, die aus einer einzelnen SELECT-Abfrage besteht, die zum Einfügen in eine andere Tabelle verwendet wird, basierend auf einer kleinen Mathematik, die mit den Argumenten in der Prozedur ausgeführt wird. Kann ich den Plan, der für diese Abfrage verwendet wird, generieren, indem ich irgendwie auf die Prozedur verweise, oder muss ich die Abfrage kopieren und einfügen und Bindevariablen für die Eingabeparameter erstellen?
Verwenden Sie SQL Trace und TKPROF . Öffnen Sie beispielsweise SQL * Plus, und geben Sie dann den folgenden Code aus: -
%Vor%Sobald dies geschehen ist, suchen Sie im UDUMP-Verzeichnis Ihrer Datenbank nach einer TRC-Datei mit "something-unique" im Dateinamen. Formatieren Sie diese TRC-Datei mit TKPROF, öffnen Sie dann die formatierte Datei und suchen Sie nach der Zeichenfolge "Right-before-my-sp". Der SQL-Befehl, der von Ihrer gespeicherten Prozedur ausgegeben wird, sollte kurz nach diesem Abschnitt sein, und unmittelbar unter dieser SQL-Anweisung befindet sich der Plan für die SQL-Anweisung.
Bearbeiten: Zum Zwecke der vollständigen Offenlegung sollte ich all denen danken, die mir Antworten gegeben haben Mike McAllister 23.05.2017, 11:53
Soweit ich verstehe, wurde dies absichtlich gemacht. Die Idee ist, dass einzelne Abfragen innerhalb der Prozedur vom Optimierer getrennt betrachtet werden, daher ist EXPLAIN PLAN nicht sinnvoll für eine gespeicherte Prozedur, die mehrere Abfragen / Anweisungen enthalten könnte.
Die aktuelle Antwort lautet NEIN, Sie können sie nicht gegen einen Proc ausführen, und Sie müssen sie gegen die einzelnen Anweisungen selbst ausführen. Schwierig, wenn Sie Variablen und Berechnungen haben, aber so ist es.
Viele Tools wie Toad oder SQL Developer fordern Sie beim Ausführen eines EXPLAIN-Plans zur Eingabe der Werte für Bindevariablen auf. Sie müssten dies manuell in SQL * Plus oder anderen Tools tun.
Sie können auch die SQL-Ablaufverfolgung aktivieren und die gespeicherte Prozedur ausführen und dann den EXPLAIN-Plan aus der Ablaufverfolgungsdatei abrufen.
Achten Sie darauf, dass Sie nicht nur den EXPLAIN-Plan für die SELECT-Anweisung abrufen. Das Vorhandensein der INSERT-Klausel kann das Optimierungsziel von den ersten Zeilen in alle Zeilen ändern.
Tags und Links oracle