绑定变量

什么是绑定变量? 
           查询通常只是因为改变where子句中的内容而产生不同的结果。为了在这种情况下避免硬解析,我们需要使用绑定变量(bind variable)。它是用户放入查询中的占位符,它会告诉Oracle"我会随后为这个变量提供一个值,现在需要生成一个方案,但我实际执行语句的时候,我会为您提供应该使用的实际值"。  


    select * from emp where ename='KING'; //不使用绑定变量
    select * from emp where ename=:bv     //使用绑定变量

使用绑定变量对性能的影响
 
使用绑定变量的好处:
1. 如果Oracle能在共享池中找到用户要执行的sql语句,那么会省略解析、确定优化方案等过程;
2. 用户在使用共享池的时候,会锁定它,如果使用绑定变量,那么会大大减少锁定的时间;
执行下面这个例子,可以看到使用和不使用绑定变量的区别:

SQL> alter system flush shared_pool;
SQL> set serveroutput ondeclare
    l_start number;
    l_cnt number;
begin
    l_start := dbms_utility.get_time;
    for i in 1..100
    loop
       execute immediate
       'select count(*) from dual
           where dummy='''||to_char(i)||''''
       into l_cnt;
    end loop;
    dbms_output.put_line('No binds'||(dbms_utility.get_time - l_start)||'hsecs');
   
    l_start := dbms_utility.get_time;
    for i in 1..100
    loop
       execute immediate
       'select count(*) from dual
           where dummy=:x'
           into l_cnt
           USING to_char(i);
    end loop;
    dbms_output.put_line('binding'||(dbms_utility.get_time - l_start)||'hsecs');
end;

   
为了使性能更好,以下方面需要注意:
1. 在所有可能的地方使用完全相同的查询文本;
2. 尽量将sql语句隐藏在存储过程或者函数中;
3. 在应用程序的编程中,也要尽量使用函数、过程等可以调用的结构中去;


来自:《Oracle 编程入门经典》( Beginning Oracle Programming )

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-84224/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-84224/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值