绑定变量用法

绑定变量用法

ID:20512708

大小:32.50 KB

页数:5页

时间:2018-10-13

绑定变量用法_第1页
绑定变量用法_第2页
绑定变量用法_第3页
绑定变量用法_第4页
绑定变量用法_第5页
资源描述:

《绑定变量用法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在开发一个数据库系统前,有谁对Oracle系统了解很多,尤其是它的特性,好象很少吧;对初学者来讲,这更是不可能的事情;仅仅简单掌握了SQL的写法,就开始了数据库的开发,其结果只能是开发一个没有效率,也没有可扩展的系统;  因此,我写这个主题也是希望让大家更多地掌握Oracle数据库的特性,从而在架构一个新系统时,能考虑系统的可扩展,可伸缩性,也兼顾系统的效率和稳定;  使用绑定变量是Oracle数据库的特性之一;于是大家要问,为什么使用,怎样使用,它的使用限制条件是什么?我会按照这样的想法去解答大家的疑问,我也会以举例子的方式来回答这

2、些问题;  1.为什么使用绑定变量?  这是解决Oracle应用程序可伸缩性的一个关键环节;而Oracle的共享池就决定了开发人员必须使用绑定变量;如果想要Oracle运行减慢,甚至完全终止,那就可以不用绑定变量;  这里举例说明上述问题;  为了查询一个员工代号是123,你可以这样查询:  select*fromempwhereempno=’123’;  你也可以这样查询:  select*fromempwhereempno=:empno;  象我们往常一样,你查询员工’123’一次以后,有可能再也不用;接着你有可能查询员工’456

3、’,然后查询’789’等等;如果查询使用象第一个查询语句,你每次查询都是一个新的查询(我们叫它硬编码的查询方法);因此,Oracle每次必须分析,解析,安全检查,优化等等;  第二个查询语句提供了绑定变量:empno,它的值在查询执行时提供,查询经过一次编译后,查询方案存储在共享池中,可以用来检索和重用;在性能和伸缩性方面,这两者的差异是巨大的,甚至是惊人的;通俗点讲,就不是一个级别;  第一个查询使用的频率越高,所消耗的系统硬件资源越大,从而降低了用户的使用数量;它也会把优化好的其它查询语句从共享池中踢出;就象一个老鼠坏了一锅汤似的

4、,系统的整体性能降低;而执行绑定变量,提交相同对象的完全相同的查询的用户(这句话,大家听起来比较难理解,随后我会给出详细的解释),一次性使用就可重复使用,其效率不言耳语;打个形象的比喻来说,第一个查询就象一次性使用的筷子,而第二个查询象是铁筷子,只要洗干净,张三李四都能用,合理有效地使用了资源;  下面举例子去详细论证上述的问题,不使用绑定变量为生病状况:  这是一个未使用的绑定变量(吃药前):  setechoon;(把执行结果显示出来)  altersystemflushshared_pool;  这条语句是清空共项池,每次都必须

5、使用,确保共享池是空的,以提高执行效率;以下是引用片段:  set timing on(打开记时器.)  declare  type rc is ref cursor;  l_rc rc;  l_dummy all_objects.object_name%type;  l_start number default dbms_utility.get_time;  begin  for i in 1 .. 1000  loop  open l_rc for  'select object_name  from all_objects  w

6、here object_id = ' 

7、

8、 i;  fetch l_rc into l_dummy;  close l_rc;  end loop;  dbms_output.put_line  ( round( (dbms_utility.get_time-l_start)/100, 2 ) 

9、

10、  ' seconds...' );  end;  /  PL/SQL 过程已成功完成。  执行时间: 已用时间: 00: 00: 07.03  这是一个使用的绑定变量(吃药后):  set echo on  alter system fl

11、ush shared_pool;  declare  type rc is ref cursor;  l_rc rc;  l_dummy all_objects.object_name%type;  l_start number default dbms_utility.get_time;  begin  for i in 1 .. 1000  loop  open l_rc for  'select object_name  from all_objects  where object_id = :x'  using i;  fet

12、ch l_rc into l_dummy;  close l_rc;  end loop;  dbms_output.put_line  ( round( (dbms_utility.get_time-l_start)/

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。