当前位置:  数据库>oracle

Oracle 绑定变量示例

    来源: 互联网  发布时间:2017-04-01

    本文导语: 绑定变量对Oracle 的性能来说是非常重要的,之前有整理一些理论知识:        Oracle 绑定变量详解                 在这里演示一下绑定变量的例子, 注意,绑定变量对索引选择性不好的列不适用,可能会导致错误的执...

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

       Oracle 绑定变量详解

      

 

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

 

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

       Oracle 索引的维护

      

 

 

示例

 

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 语句,但是每次发出去的语句都是一样的,这1000次SQL的hash 值是一样的,他们的执行计划也是一样的。

 

 

对上述代码进行修改:

 

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

 

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


    
 
 

您可能感兴趣的文章:

  • oracle while的用法示例分享
  • Oracle 使用Java Source 简单示例
  • ORACLE 毫秒与日期的相互转换示例
  • java使用jdbc链接Oracle示例类分享
  • Oracle数据库安装配置示例
  • java操作oracle数据库示例
  • Oracle数据库安装配置流程示例详细解析
  • oracle表空间中空表统计方法示例介绍
  • oracle创建删除用户示例分享(oracle删除用户命令及授权)
  • 数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)
  • Oracle层次查询和with函数的使用示例
  • php连接oracle数据库的示例代码
  • ORACLE实现字段自增示例说明
  • SqlServer实现类似Oracle的before触发器示例
  • oracle截取字符(substr)检索字符位置(instr)示例介绍
  • Oracle外键不加索引引起死锁示例
  • Oracle定义DES加密解密及MD5加密函数示例
  • Oracle数据库密码重置、导入导出库命令示例应用
  • 随机获取oracle数据库中的任意一行数据(rownum)示例介绍
  • oracle comment命令用法示例分享
  • 也谈Oracle 数据库的绑定变量特性及应用
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • window中oracle环境变量设置方法分享
  • Oracle 系统变量函数介绍
  • oracle环境变量保存问题求教
  • Oracle 系统变量函数用法指南
  • Oracle与JSDK4.0环境变量冲突,如何解决(在线等待)?
  • Oracle 中的表变量(数组变量)
  • 要装oracle,设置好环境变量。之后就啥命令也用不了了
  • oracle客户端环境变量设置的问题
  • 深入ORACLE变量的定义与使用的详解
  • Oracle全局数据库名、环境变量和sid的区别
  • Linux下安装oracle碰到环境变量问题的解决
  • Oracle环境变量引发“Connected to an idle instance.”错误
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3