当然是写直接写sql执行效率高insert into table2 select * from table1;
用批量insert效率最高! insert into table2 select × from table1; commit;
绑定变量:动态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,用动态绑定变量还需要写存储过程,用不着这么麻烦.用一楼的方法就可以.
我也想到过这样,但是表结构虽然是一样的,但是比如id,是不能直接拷贝插入的。 比如:table2当前最大id是100,而table1是10,那么插入的id table2的应该是101才是正确的。 “insert into table2 select * from table1;”能实现吗?!
可以的吧? insert into table2 select (select max(table2.id) from table2)+table1.id,table1.XXX ... from table2 from table1; 可行么!
用批量insert效率最高!
insert into table2 select × from table1;
commit;
绑定变量:动态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,用动态绑定变量还需要写存储过程,用不着这么麻烦.用一楼的方法就可以.
“insert into table2 select * from table1;”能实现吗?!
insert into table2 select (select max(table2.id) from table2)+table1.id,table1.XXX ... from table2 from table1;
可行么!