`
ijavagos
  • 浏览: 1189897 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Oracle 绑定变量 示例

 
阅读更多

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

Oracle 绑定变量 详解

http://blog.csdn.net/tianlesoftware/archive/2010/09/01/5856430.aspx

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

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

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

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

Oracle 索引的维护

http://blog.csdn.net/tianlesoftware/archive/2010/06/19/5680706.aspx

示例

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

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

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

Blog http://blog.csdn.net/tianlesoftware

Email: dvd.dba@gmail.com

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

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

聊天 群:40132017 聊天2群:69087192

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

分享到:
评论

相关推荐

    Oracle中Using用法

    Oracle 动态SQL介绍以及using用法示例

    Oracle11g从入门到精通2

    5.2.6 使用绑定变量 5.2.7 跟踪语句 5.3 设置SQL*Plus环境 5.3.1 SHOW命令 5.3.2 SET命令 5.4 SQL*Plus环境介绍 5.4.1 存储SQL*Plus环境 5.4.2 假脱机输出 5.4.3 联机帮助 5.5 使用SQL*Plus格式化...

    ORACLE11G宝典.rar 是光盘里面的内容,书太厚咧没法影印啊

     2.6.3 绑定变量  2.7自定义SQL*Plus环境  2.7.1 使用SHOW命令  2.7.2 使用SET命令  2.7.3 保存与定制SQL*Plus环境  2.8 格式化查询结果  2.8.1 格式化列  2.8.2 限制重复行  2.8.3 使用汇总行  ...

    Oracle11g从入门到精通

    5.2.6 使用绑定变量 5.2.7 跟踪语句 5.3 设置SQL*Plus环境 5.3.1 SHOW命令 5.3.2 SET命令 5.4 SQL*Plus环境介绍 5.4.1 存储SQL*Plus环境 5.4.2 假脱机输出 5.4.3 联机帮助 5.5 使用SQL*Plus格式化查询结果 ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用...

    (E文)基于成本的Oracle优化法则.pdf

    7.2.1 直方图和绑定变量 147 7.2.2 Oracle何时忽略直方图 149 7.3 频率直方图 152 7.3.1 伪造频率直方图 155 7.3.2 注意事项 156 7.4 “高度均衡”直方图 157 7.5 重新审视数据问题 163 7.5.1 愚蠢的数据类型 163 ...

    SQL性能优化

    1.2 使用绑定变量,避免常量的直接引用。 示例:以下书写不符合本规范。 INSERT INTO sm_users (user_id, user_name, created_by, creation_date) VALUES (1, 'Tang', -1, SYSDATE); 建议用如下方式操作: ...

    报表源码V2.0DotNet(C#,VB)

    此源码包括CSharp、VB.net报表代码示例。 Gscr.Report控件(广源报表控件)实现报表自由定义,报表显示、打印预览、打印、公式、排序、导出等报表常见功能,是一款较好报表控件。 ---以下是引用官方部分简介--- Gscr....

    报表源码Gscr ReportV3.0(C#,VB)

    此源码包括CSharp、VB.net代码示例。 Gscr.Report控件(广源报表控件)实现报表自由定义,报表显示、打印预览、打印、公式、排序、导出等报表常见功能,是一款较好报表控件。 ------以下是引用官方部分简介------ ...

    精通sql结构化查询语句

    12.2.4 UNIQUE约束 12.2.5 FOREIGN KEY约束 12.2.6 NOT NULL约束 12.2.7 列约束和表约束 12.3 规则 12.3.1 创建规则 12.3.2 规则的绑定与松绑 12.4 域约束与断言 12.4.1 域与域约束 12.4.2 利用断言创建多表约束 ...

    apacheds_docker:Dockerized apacheds

    ##How to use this image 目前这个图像不接受任何环境变量,但您需要将端口暴露给本地机器以使用进行连接-p 10389:10389 (未加密或 StartTLS) -p 10636:10636 (SSL) ##示例与 boot2docker docker run --name ...

    亮剑.NET深入体验与实战精要2

    1.3.6 变量的作用域 13 1.3.7 常量 16 1.3.8 流程控制 16 1.3.9 字符串常见操作 21 1.3.10 几个常用的数学函数 27 1.4 .NET的面向对象之门 27 1.4.1 继承——“子承父业” 28 1.4.2 委托——“任务书” 35 1.4.3 ...

    亮剑.NET深入体验与实战精要3

    1.3.6 变量的作用域 13 1.3.7 常量 16 1.3.8 流程控制 16 1.3.9 字符串常见操作 21 1.3.10 几个常用的数学函数 27 1.4 .NET的面向对象之门 27 1.4.1 继承——“子承父业” 28 1.4.2 委托——“任务书” 35 1.4.3 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.4. Oracle TopLink 12.4.1. SessionFactory 抽象层 12.4.2. TopLinkTemplate 和 TopLinkDaoSupport 12.4.3. 基于原生的TopLink API的DAO实现 12.4.4. 事务管理 12.5. iBATIS SQL Maps 12.5.1. iBATIS 1.x和2.x的...

    asp.net知识库

    利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托:一个C#睡前故事 [推荐] - [原创] Microsoft .NET策略及框架概述 卸载Class? Web Form 窗体 如何实现web...

    支持多数据库的ORM框架ef-orm.zip

    (E-SQL) E-SQL不但解决了异构数据库的语法问题、函数问题、特殊的写法问题,还解决了动态SQL问题、绑定变量扩展等特性。 对于各种常用SQL函数和运算符,都可以自动转换为当前数据库支持的方言来操作。其函数支持也要...

Global site tag (gtag.js) - Google Analytics