批量处理不仅可以和静态sql组合,也可以和动态sql结合使用,但是在8i和9i中,其具体处理方式有些差异
[@more@]
1> 在8i环境下
create table aaa (a1 number);
create type vcarray as table of number;
create or replace procedure p_demo is
p_value vcarray := vcarray();
begin
for i in 1..10000
loop
p_value.extend;
p_value(i) := i;
end loop;
execute immediate
'begin
forall j in 1..10000
insert into aaa values (:x(j));
end;'
using p_value;
commit;
end p_demo;
注意:1、使用数组类型要先初始化p_value vcarray := vcarray()
2、不要在程序内定义PL/SQL表类型的p_value,因为这里使用绑定变量时
不允许使用PL/SQL变量,只允许使用SQL变量
2> 在9i以上环境下,除了可以用8i的方法,还可以用:
create table aaa (a1 number);
create or replace procedure p_demo is
p_value dbms_sql.Number_Table;
begin
for i in 1..10000
loop
p_value(i) := i;
end loop;
forall j in 1..10000
execute immediate 'insert into aaa values (:x)'
using p_value(j);
commit;
end p_demo;
/
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/3898/viewspace-817435/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/3898/viewspace-817435/