2011-08-07 5 views

Répondre

28

Fondamentalement, ils font la même chose, à savoir fournir un mécanisme pour exécuter des instructions DDL dans PL/SQL, qui n'est pas supporté nativement. Si la mémoire me sert bien, le EXEC_DDL_STATEMENT était disponible dans la version Oracle 7 du package DBMS_UTILITY, alors que SQL dynamique natif (EXECUTE IMMEDIATE) n'était introduit que dans 8.

Il existe plusieurs différences. EXECUTE IMMEDIATE concerne principalement l'exécution de SQL dynamique (comme son nom NDS l'indique). le fait que nous puissions l'utiliser pour DDL est instantané.

Mais la version de DBMS_UTILITY n'est pas conservée uniquement pour des raisons de compatibilité ascendante, mais elle a une astuce que nous ne pouvons pas faire avec EXECUTE IMMEDIATE - exécuter DDL de manière distribuée. Nous pouvons exécuter cette déclaration de notre base de données locale pour créer une table sur une base de données distante (fournissant notre utilisateur dispose des privilèges nécessaires là-bas):

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

Je ne recommande pas, disons que tout cela peut être fait.