zoukankan      html  css  js  c++  java
  • 什么是 BIND 变量?

    变量绑定会使联机事务处理过程(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
  • 相关阅读:
    Shell编程之数值运算(二) Theletter
    Shell编程检测某个服务是否运行实例 Theletter
    Shell编程之条件测试与比较(详解) Theletter
    eclipse中svn提交时报Previous operation has not finished; run 'cleanup' if it was interrupted错误的解决方法
    Jsp连接打印机
    Jsp中table导出到excel
    java创建图片验证码
    java利用映射表名称反射创建实体类并赋属性值
    基于方法的LINQ语句
    opencv中cvCreateImage大图片时出错
  • 原文地址:https://www.cnblogs.com/rxhuiu/p/9105995.html
Copyright © 2011-2022 走看看