Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle :DBMS_UTILITY.EXEC_DDL_STATEMENT contre EXÉCUTER IMMÉDIATEMENT

Fondamentalement, ils font la même chose, à savoir fournir un mécanisme pour exécuter des instructions DDL en PL/SQL, qui n'est pas pris en charge de manière native. Si ma mémoire est bonne, EXEC_DDL_STATEMENT était disponible dans la version Oracle 7 du package DBMS_UTILITY, alors que Native Dynamic SQL (EXECUTE IMMEDIATE) n'a été introduit que dans 8.

Il y a quelques différences. EXECUTE IMMEDIATE concerne principalement l'exécution de SQL dynamique (comme l'indique son alias NDS). le fait que nous puissions l'utiliser pour DDL est en passant. Alors que EXEC_DDL_STATEMENT() - comme le suggère - ne peut exécuter que DDL.

Mais la version DBMS_UTILITY n'est pas conservée uniquement pour la rétrocompatibilité, elle a une astuce intéressante que nous ne pouvons pas faire avec EXECUTE IMMEDIATE - exécuter DDL de manière distribuée. Nous pouvons exécuter cette instruction à partir de notre base de données locale pour créer une table sur une base de données distante (à condition que notre utilisateur y ait les privilèges nécessaires) :

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

Je ne le recommande pas, je dis juste que c'est faisable.