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;
应该就没问题了