SQL> alter session set sql_trace=true;会话已更改。已用时间:  00: 00: 00.28
SQL>  begin
  2   for i in 1 .. 200000 loop
  3   insert into t (x) values (i);
  4   end loop;
  5   end;
  6  /PL/SQL 过程已成功完成。已用时间:  00: 00: 54.00
SQL> select count(*) from t;  COUNT(*)
----------
    200000已用时间:  00: 00: 00.18
SQL>  begin
  2   -- v_str := 'insert into t(x) values(:temp)';
  3      for i in 1 .. 200000 loop
  4      execute immediate 'insert into t(x) values(:temp)'
  5              using i;
  6      end loop;
  7   end;
  8  /PL/SQL 过程已成功完成。已用时间:  00: 01: 03.39
SQL> alter session set sql_trace=false;会话已更改。已用时间:  00: 00: 00.01
SQL>--------------------
其中表T有一个NUMBER型字段X。
请问:
第一个存储过程有没有使用绑定变量?
若没有使用,为什么使用绑定变量的反而比未使用绑定变量的速度要慢?
若使用了,请问绑定变量有没有一个具体书写的形式?

解决方案 »

  1.   

    第一个没有使用
    若使用,具体形式见:execute immediate 'insert into t(x) values(:temp)'
      5              using i;
    :temp就是一个绑定变量速度变是当然的,要解析变量并给变量传值
      

  2.   

    execute immediate 'insert into t(x) values(:temp)'
    循环解析这句话是很慢的。
    ---------------------------------------
    点当前页,右上角管理,可以加分。