在一个循环中使用execute immdiate 'insert into table select * from table where ',执行时发现execute immdiate并不等待上次的SQL执行完成便进入下一次循环,数据库的性能有限,并发太多恐影响性能,请问,有什么办能让某次循环的insert into执行完成后再进入下次循环么?
小生谢过了!

解决方案 »

  1.   

    要在pl/sql运行中间等待..
    execute..后面再加个loop,
    添加判定条件,满足这这个条件再end loop,并进入下一次循环?
      

  2.   

    不会吧,execute immediate也会等待上面的语句执行结束以后才会执行下面的语句的我做的实验
    SQL> begin
      2  execute immediate 'insert into tttt1 select rownum, (rownum+1) from dual co
    nnect by rownum <= 1000000';
      3  dbms_output.put_line('end');
      4  end;
      5  /
    endPL/SQL 过程已成功完成。end是等待了好就才打印出来的。所以是会等待的,plsql里都是一步一步的执行的。检查一下你的程序看看是怎么回事
      

  3.   

    调试跟执行不是完全一样的吧可能是oracle的优化吧,不过我只记得对commit的优化http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams164.htm
      

  4.   

    谢谢各位了,特别谢谢2楼,经过测试,确实是执行完才执行下一条指令,我是因为在EM中看到多条Insert TOP ACTIVE的出现,才误以为是并发执行,其实,EM中的TOP ACTIVE是有延时的,某些已经过期的活动也会出现在里面(当顶级活动很少的时候)。