变量绑定会使联机事务处理过程(OLTP)系统数据库中的SQL执行速度飞快,内存效率极高;不使用绑定变量可能会使OLTP数据库不堪重负,资源被SQL解析严重耗尽,系统运行缓慢。

当一个用户与数据库建立连接后,会向数据库发出操作请求,即向数据库送过去SQL语句。Oracle在接收到这些SQL后,会先对这个SQL做一个hash函数运算,得到一个Hash值,然后到共享池中寻找是否有和这个hash值匹配的SQL存在。如果找到了,Oracle将直接使用已经存在的SQL的执行计划去执行当前的SQL,然后将结果返回给用户。如果在共享池中没有找到相同Hash值的SQL,oracle会认为这是一条新的SQL,会进行解析。

Oracle 解析的步骤如下:

(1)语法解析

(2)语义解析

(3)生成执行计划,这里分软解析和硬解析。硬解析是非常耗资源的。

(4)SQL的执行

了解了SQL的执行过程,在来看一些绑定变量,绑定变量的本质就是本来需要做Oracle硬解析的SQL变成软解析,以减少ORACLE花费在SQL解析上的时间和资源。

例子:加入有两条SQL:

Select salary from user where name=’A’;

   Select salary from user where name=’B’;

如果没有用绑定变量,那么这2条SQL会被解析2次,因为他们的谓词部分不一样。如果我们用了绑定变量,如:

Select salary from user where name=:X;

这时,之前的2条SQL就变成了一种SQL,Oracle只需要对每一种SQL做一次硬解析,之后类似的SQL都使用这条SQL产生的执行计划,这样就可以大大降低数据库花费在SQL解析上的资源开销。这种效果当SQL执行的越多,就越明显。

简单的说,绑定变量就是拿一个变量来代替谓词常量,让Oracle每次对用户发来的SQL做hash 运算时,运算出的结果都是同样的Hash值,于是将所有的用户发来的SQL看作是同一个SQL来对象。

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

为了在PL/SQL 环境中声明绑定变量,使用命令VARIABLE。例如:

1
2
VARIABLE return_code NUMBER
VARIABLE return_msg VARCHAR2(20)

可以通过SQL*Plus命令中的PRINT 显示绑定变量的值。例如:

1
2
PRINT return_code
PRINT return_msg

例:

1
2
3
4
5
6
7
VARIABLE result NUMBER;
BEGIN
  SELECT (sal*10)+nvl(comm, 0) INTO :result FROM emp 
  WHERE empno=7844;   --在pl/sql块中用冒号加变量名进行引用:x
END;
--然后再执行
PRINT result

什么是 BIND 变量?的更多相关文章

  1. Oracle sql语句执行顺序

    sql语法的分析是从右到左 一.sql语句的执行步骤: 1)词法分析,词法分析阶段是编译过程的第一个阶段.这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构 ...

  2. PL/SQL Block Structure

    [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORAC ...

  3. net-snmp子代理(SubAgent)编写详述

    net-snmp子代理(SubAgent)编写 net-snmp子代理(SubAgent)编写 Netsnmp_Node_Handler MIB/OID定义 1.头文件test.h的编写 2.test ...

  4. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  5. SQL 调优专题总结

    oracle 的优化器: oracle 有两种优化器:基于规则的优化器(rbo/rule based optimizer)和基于代价的优化器(cbo/cost based optimizer). 有时 ...

  6. PLSQL_性能优化系列06_Oracle Soft Parse / Hard Parse软硬解析

    2014-08-11 Createed By BaoXinjian

  7. Selenium定位元素

    Commands (命令) Action对当前状态进行操作失败时,停止测试 Assertion校验是否有产生正确的值 Element Locators指定HTML中的某元素 Patterns用于模式匹 ...

  8. [每日一题] 11gOCP 1z0-052 :2013-09-2 ADDM(Automatic Database Diagnostic Monitor)...................A28

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/10951207 正确答案:BC AWR简称Automatic Workload Reposi ...

  9. ocp11g培训内部教材_053课堂笔记(043)_数据备份

    053:数据库高级管理: 目录 第一部分:数据库备份与恢复... 4 第一章:备份恢复概述... 4 1.1 备份的意义: 4 1.2 数据库故障的类型:... 4 1.3 制定你的备份和恢复的计划. ...

随机推荐

  1. Unity 游戏对象的组件列表

    描述: 1 个游戏对象,上面有 4 个组件, 如图: 脚本 Test_01 的内容,如下: using System.Collections; using System.Collections.Gen ...

  2. BP人工神经网络-反向传播法

    0 网络计算结果 B(m)=f( ∑n( W(n,m)*X(n) ) + Θ(m) ) %中间层的输出 Y(k)=f( ∑m( V(m,k)*B(m) ) + ф(k) ) %输出层的输出 1 计算误 ...

  3. ThreadPoolExecutor的三种队列SynchronousQueue,LinkedBlockingQueue,ArrayBlockingQueue

    SynchronousQueue SynchronousQueue是无界的,是一种无缓冲的等待队列,但是由于该Queue本身的特性,在某次添加元素后必须等待其他线程取走后才能继续添加:可以认为Sync ...

  4. java多线程优先级问题

    java 中的线程优先级的范围是1-10,默认的优先级是5.“高优先级线程”会优先于“低优先级线程”执行. 例子: package com.ming.thread.threadpriority; pu ...

  5. 语文,数学,ps

    数学教2课以集合为主. 集合:是指具有某种特定性质的具体的或抽象的对象汇总成的集体,这些对象称为该集合的元素. 特点:确定性给定一个集合,哪些对象是这个集合元素,不允有模棱两可的情况.互用性任何两个元 ...

  6. iOS-swift-类和对象

    1.类(class) 使用关键字 class 创建一个类.属性直接在类里面声明,属性可以是变量,也可以是常量.方法和函数的创建方法一致. class Shape { var numberOfSides ...

  7. python面试题——爬虫相关

    1.接触过几种爬虫模块 urllib.requests这两种爬虫模块. 2.robots协议是什么? 它就是一个防君子不防小人的协议,网站有一些数据不想被爬虫程序爬取,可以编写robots协议文件,明 ...

  8. Java执行Shell脚本

    Linux 系统下采用 Java 执行 Shell 脚本,直接上代码: package com.smbea.demo; import java.io.BufferedReader; import ja ...

  9. 使用Ribbon Workbench来修改停用、激活按钮的权限

    在实施的过程中,有时会遇到客户为了管控使用人员的操作或防止使用人员通过停用后再激活来绕开部分逻辑,需要对激活.停用按钮赋予单独的权限.但很遗憾,在Dyanmics CRM中,并没有把停用.激活按钮单独 ...

  10. ArcMap如何修改地图坐标系统

    有时候,地图投影坐标需要作出修改,使得符合要求,不然空间参考不一样无法进行进一步的操作,分析等!下面介绍arcgis地图投影坐标的修改! 1.首先,将地图数据导入,这里我导入的是广西的边界图bound ...