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

Oracle:DBMS_UTILITY.EXEC_DDL_STATEMENT vs. EXECUTE IMMEDIATE

Im Grunde tun sie dasselbe, nämlich einen Mechanismus zum Ausführen von DDL-Anweisungen in PL/SQL bereitzustellen, der nicht nativ unterstützt wird. Wenn ich mich recht erinnere, war EXEC_DDL_STATEMENT in der Oracle 7-Version des DBMS_UTILITY-Pakets verfügbar, während Native Dynamic SQL (EXECUTE IMMEDIATE) erst in 8 eingeführt wurde.

Es gibt ein paar Unterschiede. Bei EXECUTE IMMEDIATE geht es hauptsächlich um die Ausführung von dynamischem SQL (wie sein NDS-Alias ​​anzeigt). die Tatsache, dass wir es für DDL verwenden können, ist nebenbei. Wohingegen EXEC_DDL_STATEMENT() - wie vorgeschlagen - nur DDL ausführen kann.

Aber die DBMS_UTILITY-Version wird nicht nur aus Gründen der Abwärtskompatibilität beibehalten, sie hat einen netten Trick, den wir mit EXECUTE IMMEDIATE nicht machen können – das Ausführen von DDL auf verteilte Weise. Wir können diese Anweisung von unserer lokalen Datenbank ausführen, um eine Tabelle in einer entfernten Datenbank zu erstellen (vorausgesetzt, unser Benutzer hat dort die erforderlichen Berechtigungen):

SQL>  exec [email protected]_db('create table t1 (id number)');

Ich empfehle das nicht, sondern sage nur, dass es möglich ist.