最简单的例子: ... iServiceID number; begin ... select * from service where ServiceID = iServiceID; ... end;在实际应用中,这些都需要注意的
ColinGan(浪子)说的是静态绑定,我找了个动态绑定的例子 declare l_number number; begin for i in 1..10000 loop l_number:=dbms_random.random; execute immediate 'insert into t values(:x1,:x2,:x3,:x4)' using l_number,l_number,l_number,i; end loop; commit; end; /
--------
楼主能举个例子吗?在循环中使用绑定变量可以提高性能的
使用绑定变量可以减少Oracle对语句的硬分析,加快语句的执行
在实际中没用过绑定变量,学习!
...
iServiceID number;
begin
...
select * from service where ServiceID = iServiceID;
...
end;在实际应用中,这些都需要注意的
declare
l_number number;
begin
for i in 1..10000
loop
l_number:=dbms_random.random;
execute immediate 'insert into t values(:x1,:x2,:x3,:x4)' using l_number,l_number,l_number,i;
end loop;
commit;
end;
/
变量,都是由application program对ID从1~N取值
sql_str := ('update '||v_tblname||' t2 set a'||v_colnum||' = (:1) where t2.datatime = (:2)');
execute immediate sql_str using v_ei2(i),v_starttime;:1 处是具体数值,:2处是具体时间。在没有用binding的时候,执行一天的数据需要3个半小时左右,使用绑定变量的写法,运行时间缩短到10分钟左右。—— 因为通过数据库监控软件,我发现共享池报警,出现效率瓶颈的在于过多重复的解析 'update '||v_tblname||' t2 set a'||v_colnum||' = (:1) where t2.datatime = (:2) 这个语句—— 用绑定之后,就避免重复解析问题了。
大家继续补充自己的案例