绑定变量的好处跟重要性就不说了,我们只说几个比较模糊的地方。下面做几个实验,大家猜下会不会进行绑定变量。可能大家没时间看邮件,老习惯,最后有结论。。。。。。
在说之前,再提醒下:绑定变量也不是万能的,有时候是有负面效果的,下面的几种情况不适用绑定变量:
对于隔相当一段时间才执行一次的SQL语句,这是利用绑定变量的好处会被不能有效利用优化器而抵消
数据仓库(OLAP系统)的情况下(这个haier做过数据仓库应该深有体会)
绑定变量不能当作嵌入的字符串来使用,只能当作语句中的变量来用。不能用绑定变量来代替表名、过程名、字段名等
实验1
我们试下在pl/sql语句块的循环中,会不会绑定变量。建个测试表:
create table tt(id int , name varchar2(10));
为了进行语句跟踪,开启trace:alter session set sql_trace=true;
执行sql:
begin
for i in 1 .. 100 loop
insert into tt values (i, 'test');
end loop;
commit;
end;
/
关闭trace:alter session set sql_trace=false; 查看下trace file:
=====================
PARSING IN CURSOR #3 len=90 dep=0 uid=31 oct=47 lid=31 tim=7109565004 hv=962259239
ad='668ec528'
declare
begin
for i in 1..100 loop
insert into tt values(i,'test');
end loop;
commit;
end;
END OF STMT
PARSE #3:c=15625,e=5678,p=0,cr=3,cu=0,mis=1,r=0,dep=0,og=1,tim=7109564996
=====================
PARSING IN CURSOR #5 len=34 dep=1 uid=31 oct=2 lid=31 tim=7109565520 hv=1299226876
ad='66869934'
INSERT INTO TT VALUES(:B1 ,'test')
END OF STMT
PARSE #5:c=0,e=226,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=1,tim=7109565513
=====================
我们发现,这里自动被绑定变量了。省的我们操心了。其实,在很多时候,oracle会自动给我们绑定的。如果不知道去哪里看trace file的话,使用sql:
select || || || '_ora_' || ||
'.trc' trace_file
from (select value from v$parameter where name = 'user_
关于绑定变量的几个小误区_ 来自淘豆网m.daumloan.com转载请标明出处.