Oracle 绑定变量 示例

原创 2011年04月14日 21:15:00

 

 

绑定变量对Oracle 的性能来说是非常重要的,之前有整理一些理论知识:

       Oracle 绑定变量 详解

http://www.cndba.cn/Dave/article/1572

 

       Event 10053 执行计划 绑定变量 Bind peeking

       http://blog.csdn.net/tianlesoftware/archive/2010/04/29/5544307.aspx

 

       在这里演示一下绑定变量的例子, 注意,绑定变量对索引选择性不好的列不适用,可能会导致错误的执行计划,从而影响SQL 效率。

 

有关索引的选择性,参考:

       Oracle 索引的维护

http://www.cndba.cn/Dave/article/1157

     

 

 

示例

 

SQL> create table t1(c1 number,c2 number,c3 number,c4 number);

Table created.

 

SQL> declare

  2  i number;

  3  j number;

  4  str varchar2(200);

  5  begin

  6  i :=1;

  7  j :=2;

  8  str :='insert into t1 values(:x,:y,:x,:y)';

  9  execute immediate str using i,j,i,j;

 10  end;

 11  /

 

PL/SQL procedure successfully completed.

 

SQL> select * from t1;

 

C1         C2         C3         C4

---------- ---------- ---------- ----------

1          2          1          2

 

这里是绑定变量的一个简单应用, 绑定变量起到占位的作用.

 

进一步的测试:ORACLE系统本身是能够对变量做绑定的。

 

SQL> set timing on

SQL> declare       

  2  i number;

  3  begin

  4  for i in 1..1000 loop

  5     insert into t1 values(i,i+1,i+2,i+3);

  6  end loop;

  7  end;

  8  /

 

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.28

 

SQL> select count(*) from t1;

  COUNT(*)

----------

      1001

 

Elapsed: 00:00:00.01

 

       在这段代码块的执行过程中,ORACLE会自动将其中的变量进行绑定。 也就是说:这段代码执行了1000 insert 语句,但是每次发出去的语句都是一样的,1000SQLhash 值是一样的,他们的执行计划也是一样的。

 

 

对上述代码进行修改:

 

SQL> declare

  2     i number;

  3     str varchar2(200);

  4  begin

  5     for i in 1..1000 loop

  6     str:='insert into t1 values ('||to_char(i)||','||to_char(i)||'+1,'||to_char(i)||'+2,'||to_char(i)||'+3)';

  7     execute immediate str;

  8  end loop;

  9  end;

 10  /

 

PL/SQL procedure successfully completed.

 

Elapsed: 00:00:02.88

 

这段代码没有自动使用绑定变量,所以时间上明显长。 我们使用绑定变量看看。

 

SQL> declare

  2     i number;

  3     str varchar2(200);

  4  begin

  5     for i in 1..1000 loop

  6     str:='insert into t1 values (:i,:i+1,:i+2,:i+3)';

  7     execute immediate str using i,i,i,i;

  8  end loop;

  9  end;

 10  /

 

PL/SQL procedure successfully completed.

 

Elapsed: 00:00:00.19

 

使用绑定变量后,时间明显要少很多。

 

 

 

 

 

 

 

-------------------------------------------------------------------------------------------------------

QQ: 492913789
Email: ahdba@qq.com
Blog: http://www.cndba.cn/dave

DBA1 群:62697716();   DBA2 群:62697977()   DBA3 群:62697850()  

DBA 超级群:63306533();  DBA4 群: 83829929  DBA5群: 142216823   

聊天 群:40132017   聊天2群:69087192

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

版权声明: https://blog.csdn.net/tianlesoftware/article/details/6324243

oracle绑定变量使用方法总结

在Oracle中,对于一个提交的sql语句,存在两种可选的解析过程,硬解析和软解析。 一个硬解析需要经解析,制定执行路径,优化访问计划等步骤。硬解析不仅仅会耗费大量的cpu,更重要的是会占据重要的闩(...
  • gumengkai
  • gumengkai
  • 2016-11-11 17:36:17
  • 12962

Oracle 绑定变量 详解

 之前整理过一篇有关绑定变量的文章,不太详细,重新补充一下。         Oracle 绑定变量         http://blog.csdn.net/tianlesoftware/archi...
  • tianlesoftware
  • tianlesoftware
  • 2010-09-01 19:52:00
  • 14127

ORACLE 绑定变量用法总结

之前对ORACLE中的变量一直没个太清楚的认识,比如说使用:、&、&&、DEIFINE、VARIABLE……等等。今天正好闲下来,上网搜了搜相关的文章,汇总了一下,贴在这里,方便学习。 =======...
  • wh62592855
  • wh62592855
  • 2009-11-06 21:31:00
  • 39194

oracle 的绑定变量

变量绑定是OLTP系统中一个非常值得关注的技术。良好的变量绑定会使OLTP系统数据库中的SQL 执行速度飞快,内存效率极高;不使用绑定变量可能会使OLTP 数据库不堪重负,资源被SQL解析严重耗尽,系...
  • feichideche
  • feichideche
  • 2016-07-18 22:35:18
  • 329

ORACLE绑定变量的使用

在ORACLE中,使用绑定变量,可以降低硬解析,通常可以提高系统的性能(注意,是通常,不是任何情况下)。       以表tabletest为例,我们来看看如何使用绑定变量,tabletest的表结构...
  • allanmorgan
  • allanmorgan
  • 2008-08-05 16:50:00
  • 9173

oracle绑定变量

为什么要使用绑定变量: 在JAVA中的SQL 语句的编写方面,没有使用ORACLE 绑定变量,很大程度上降低了数据库的性能,表现在两个方面: 1、SQL语句硬分析(Hard Parse)太...
  • RiceToLife
  • RiceToLife
  • 2016-11-01 10:28:33
  • 349

在java中使用oracle绑定变量

为什么要使用绑定变量: 在JAVA中的SQL 语句的编写方面,没有使用ORACLE 绑定变量,很大程度上降低了数据库的性能,表现在两个方面: 1、SQL语句硬分析(Hard Parse)太...
  • z69183787
  • z69183787
  • 2014-04-15 12:43:02
  • 772

存储过程中绑定变量

Create Or Replace Procedure test3 (empno  number) Is     v_eno number := empno;     v_ename varcha...
  • wll_1017
  • wll_1017
  • 2014-12-11 16:52:30
  • 2839

Java中<em>Oracle</em>操作<em>绑定变量</em>使用用户工具模块解决方案

Java中<em>Oracle</em>操作<em>绑定变量</em>使用用户工具模块解决方案 立即下载 上传者: 程序代表不了我的心 时间: 2012-09-17 综合评分: 0 积分/C币:3 <em>oracle绑定变量</em>使用方法...
  • 2018年04月14日 00:00

oracle开发过程中尽量使用绑定变量

在存储过程或者java程序使用sql的过程中,尽量使用绑定变量。否则硬解析太多,比较拖性能。 下面查询只是空格多了几个。 SQL> select * from ml_1234 where a= ...
  • shushugood
  • shushugood
  • 2016-05-17 00:10:33
  • 470
收藏助手
不良信息举报
您举报文章:Oracle 绑定变量 示例
举报原因:
原因补充:

(最多只允许输入30个字)