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

Oracle:Was bedeutet „sofort ausführen“?

Es dient zum Ausführen von nativem dynamischem SQL .

Für DML würden Sie es verwenden, wenn Sie Anweisungen ausführen, die Sie zur Kompilierzeit nicht verfügbar haben, z. wenn die Spaltenliste auf einer Auswahl des Benutzers basiert.

In Ihrem Fall wird es verwendet, weil DDL nicht als statisches SQL innerhalb von PL/SQL ausgeführt werden kann. Nur bestimmte Abfragen, DML- und TCL-Befehle sind gültig . Alles andere muss als dynamisch behandelt werden.

Ich würde sagen, es ist selten, DDL aus einem PL/SQL-Block verwenden zu müssen. TRUNCATE könnte vernünftig sein; Wenn Sie feststellen, dass Objekte spontan erstellt oder gelöscht werden, ist dies möglicherweise ein größeres Problem, da dies auf ein suboptimales Datenmodell hindeuten kann.

EXECUTE IMMEDIATE selbst wird nicht automatisch festgelegt; aber wenn Sie DDL ausführen, verhält sich das genauso, als ob Sie es außerhalb von PL/SQL ausführen würden, also wird es in Ihrem Fall übergeben, ja.

Übrigens bin ich mir nicht sicher, warum Ihr Code eine Zwischenvariable verwendet, um die Anweisung zu halten. das ist nützlich, wenn Sie anzeigen möchten, was es vielleicht ausführen wird, aber das scheinen Sie nicht zu tun. Was Sie haben, könnte wie folgt ausgeführt werden:

EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';

d.h. ohne Verwendung von V_SQL_1 überhaupt.