Sql Oracle:DBMS_UTILITY.EXEC_DDL_语句vs EXECUTE IMMEDIATE
Sql Oracle:DBMS_UTILITY.EXEC_DDL_语句vs EXECUTE IMMEDIATE,sql,oracle,ddl,Sql,Oracle,Ddl,DBMS\u实用程序.EXEC\u DDL\u语句和executeimmediate之间的区别是什么?基本上它们做的是相同的事情,即提供一种机制来执行PL/SQL中的DDL语句,而PL/SQL本身不支持这种机制。如果内存很好的话,EXEC_DDL_语句可以在Oracle7版本的DBMS_实用程序包中使用,而原生动态SQL(executeimmediate)只在Oracle7版本的DBMS_实用程序包中引入 有几个不同之处。executeimmediate主要是关于执行动态SQL(如其NDS别名所
DBMS\u实用程序.EXEC\u DDL\u语句
和executeimmediate
之间的区别是什么?基本上它们做的是相同的事情,即提供一种机制来执行PL/SQL中的DDL语句,而PL/SQL本身不支持这种机制。如果内存很好的话,EXEC_DDL_语句可以在Oracle7版本的DBMS_实用程序包中使用,而原生动态SQL(executeimmediate)只在Oracle7版本的DBMS_实用程序包中引入
有几个不同之处。executeimmediate主要是关于执行动态SQL(如其NDS别名所示)。事实上,我们可以将其用于DDL是由。而EXEC_DDL_语句()——正如建议的那样——只能执行DDL
但是DBMS_实用程序版本并不仅仅是为了向后兼容而保留的,它还有一个我们无法用分布式方式执行即时运行DDL的巧妙技巧。我们可以从本地数据库运行此语句,以便在远程数据库上创建表(前提是我们的用户在远程数据库上具有必要的权限):
我不是推荐这个,只是说它可以做到。我意识到我的回复晚了9年,但还有一个区别 dbms_utility.exec_ddl_语句只执行ddl。如果你试着做一个插入,它不会做。它也不会返回错误,因此您不会知道您没有插入
-- drop table kevtemp1;
create table kevtemp1 (a integer);
insert into kevtemp1 values (1);
commit;
begin
insert into kevtemp1 values (2);
end;
/
commit;
begin
DBMS_UTILITY.EXEC_DDL_STATEMENT('insert into kevtemp1 values (3)');
end;
/
commit;
select * from kevtemp1;
不知道为什么有人投票以“离题”来结束这场辩论。这是一个关于编程语言的问题,有什么离题的?
-- drop table kevtemp1;
create table kevtemp1 (a integer);
insert into kevtemp1 values (1);
commit;
begin
insert into kevtemp1 values (2);
end;
/
commit;
begin
DBMS_UTILITY.EXEC_DDL_STATEMENT('insert into kevtemp1 values (3)');
end;
/
commit;
select * from kevtemp1;