批量绑定与本地动态SQL execute immediate的结合

批量处理不仅可以和静态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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值