Oracle:DBMS_UTILITY.EXEC_DDL_STATEMENT与EXECUTE IMMEDIATE

Rev*_*ous 22 sql oracle ddl

哪个是DBMS_UTILITY.EXEC_DDL_STATEMENTEXECUTE IMMEDIATE?之间的区别 ?

APC*_*APC 32

从根本上说,它们做同样的事情,即提供一种在PL/SQL中执行DDL语句的机制,这在本机上是不受支持的.如果内存对我很有用,那么EXEC_DDL_STATEMENT在Oracle 7版本的DBMS_UTILITY包中可用,而Native Dynamic SQL(EXECUTE IMMEDIATE)仅在8中引入.

有几点不同.EXECUTE IMMEDIATE主要是关于执行动态SQL(如其NDS名称所示).我们可以将它用于DDL这一事实就是这样做的.

但DBMS_UTILITY版本并不仅仅为了向后兼容而保留,它有一个我们无法用EXECUTE IMMEDIATE做的巧妙技巧 - 以分布式方式运行DDL.我们可以从本地数据库运行此语句,以在远程数据库上创建表(假设我们的用户具有必要的权限):

SQL>  exec DBMS_UTILITY.EXEC_DDL_STATEMENT@remote_db('create table t1 (id number)');
Run Code Online (Sandbox Code Playgroud)

我不推荐这个,只是说可以做到.