日期:2014-05-17  浏览次数:20956 次

execute immediate 与DML语句一起用的问题
我写一简单脚本如下:
begin
  execute immediate 'create table tb(id int)';
  insert into tb values(1);
end;
/
执行时会提示表或视图不存在,后来修改如下:
declare
v_num float;
begin
   execute immediate 'create table tb(id int)';
   --下面for循环会执行10秒以上
   v_num:=1.234566;
     for i in 1..100000 loop
    v_num:=cos(v_num);
    end loop;
   insert into tb values(1);
end;
/
执行后仍然提示表或视图不存在
请问是否是因为execute immeditate 与DML有运行优先级的不同?
还是因为其它原因?
execute?immediate

------解决方案--------------------
了解 动态sql和静态sql的 检查顺序 就差不多搞清楚了。。。
------解决方案--------------------
你的语句在编译的时候会检查到 tb 表不存在,直接就提示表或视图不存在了,根本就没有执行。 如果改成
begin
  execute immediate 'create table tb(id int)';
  execute immediate 'insert into tb values(1)';
  commit;
end;
应该就没问题了