在存储过程loop中,用
sqlStr:= 'update '||a_tab||' set a_kpid ='''||l_a_kpid.......;
execute immediate;
和直接update a_tab set a_kpid =l_a_kpid......;相比
速度慢了不少,不知道是什么原因?

解决方案 »

  1.   

    execute immediate 每次执行都需要parse,从v$sql中可以看到
      

  2.   

    应该execute immediate 自身的消耗,execute immediate中的SQL的parse和一般的SQL一样,也支持绑定变量,不会每次都parse
      

  3.   

    应该是execute immediate每次都PARSE了,因为是先拼接SQL再去执行,这时的SQL都不是一样的
      

  4.   

    呵呵  如果你的SQL语句没问题 你因该检查包含该语句的存储过程或函数 不是SQL语句的问题
      

  5.   

    sqlStr:=   'update   '||a_tab|| '   set   a_kpid   = :l_a_kpid.......'; 
    execute immedaite sqlStr using l_a_kpid;