ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 绑定变量

绑定变量

原创 Linux操作系统 作者:tolywang 时间:2005-03-16 00:00:00 0 删除 编辑
什么是绑定变量? 
           查询通常只是因为改变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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13167677