sql >> Base de Datos >  >> RDS >> Oracle

Oracle:DBMS_UTILITY.EXEC_DDL_STATEMENT frente a EJECUTAR INMEDIATO

Básicamente, hacen lo mismo, que es proporcionar un mecanismo para ejecutar declaraciones DDL en PL/SQL, que no se admite de forma nativa. Si la memoria no me falla, EXEC_DDL_STATEMENT estaba disponible en la versión Oracle 7 del paquete DBMS_UTILITY, mientras que Native Dynamic SQL (EXECUTE IMMEDIATE) solo se introdujo en 8.

Hay un par de diferencias. EXECUTE IMMEDIATE se trata principalmente de ejecutar SQL dinámico (como indica su alias NDS). el hecho de que podamos usarlo para DDL es por cierto. Mientras que EXEC_DDL_STATEMENT(), como sugiere, solo puede ejecutar DDL.

Pero la versión DBMS_UTILITY no se conserva solo por compatibilidad con versiones anteriores, tiene un buen truco que no podemos hacer con EXECUTE IMMEDIATE:ejecutar DDL de forma distribuida. Podemos ejecutar esta declaración desde nuestra base de datos local para crear una tabla en una base de datos remota (siempre que nuestro usuario tenga los privilegios necesarios allí):

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

No estoy recomendando esto, solo digo que se puede hacer.