oracle中,两张一样结构的表,table1,table2
一次要将table1中的比如10000条记录插入到table2中,请问怎么用oci实现效率最高?
是不是用动态绑定效率会比较高?
怎么实现动态绑定?谢谢!

解决方案 »

  1.   

    当然是写直接写sql执行效率高insert into table2 select * from table1;
      

  2.   


    用批量insert效率最高!
    insert into table2 select × from table1;
    commit;
      

  3.   


    绑定变量:动态SQL的形成一般使用的拼串和榜定变量两种方法,而普遍认为绑定变量有利于提高效率,其效率甚至与拼串的方式不可同日而语,这是可以理解的,绑定变量的使用,可以在多次执行sql时只使用一次语句分析、优化,而拼接则被认为是每次执行的sql都是不同的,每次执行都需要重新分析、优化,这往往是sql执行中最费时的操作。
    动态语句最常用的写法:declare 
      v_sql varchar2(200);
      v_fields vharchar2(20);
    begin
         v_sql:='select field1 from table1 where field2=:a and field3=:a';     execute immediate v_sql into  v_fields  using '100' , '200';
    end;
    我觉得你的sql,用动态绑定变量还需要写存储过程,用不着这么麻烦.用一楼的方法就可以.
      

  4.   

    我也想到过这样,但是表结构虽然是一样的,但是比如id,是不能直接拷贝插入的。 比如:table2当前最大id是100,而table1是10,那么插入的id table2的应该是101才是正确的。
    “insert into table2 select * from table1;”能实现吗?!
      

  5.   

    可以的吧?
    insert into table2 select (select max(table2.id) from table2)+table1.id,table1.XXX ... from table2 from table1;
    可行么!