什么是 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 NUMBERVARIABLE return_msg VARCHAR2(20) |
可以通过SQL*Plus命令中的PRINT 显示绑定变量的值。例如:
|
1
2
|
PRINT return_codePRINT 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块中用冒号加变量名进行引用:xEND;--然后再执行PRINT result |
什么是 BIND 变量?的更多相关文章
- Oracle sql语句执行顺序
sql语法的分析是从右到左 一.sql语句的执行步骤: 1)词法分析,词法分析阶段是编译过程的第一个阶段.这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构 ...
- PL/SQL Block Structure
[顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透 ORAC ...
- net-snmp子代理(SubAgent)编写详述
net-snmp子代理(SubAgent)编写 net-snmp子代理(SubAgent)编写 Netsnmp_Node_Handler MIB/OID定义 1.头文件test.h的编写 2.test ...
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- SQL 调优专题总结
oracle 的优化器: oracle 有两种优化器:基于规则的优化器(rbo/rule based optimizer)和基于代价的优化器(cbo/cost based optimizer). 有时 ...
- PLSQL_性能优化系列06_Oracle Soft Parse / Hard Parse软硬解析
2014-08-11 Createed By BaoXinjian
- Selenium定位元素
Commands (命令) Action对当前状态进行操作失败时,停止测试 Assertion校验是否有产生正确的值 Element Locators指定HTML中的某元素 Patterns用于模式匹 ...
- [每日一题] 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 ...
- ocp11g培训内部教材_053课堂笔记(043)_数据备份
053:数据库高级管理: 目录 第一部分:数据库备份与恢复... 4 第一章:备份恢复概述... 4 1.1 备份的意义: 4 1.2 数据库故障的类型:... 4 1.3 制定你的备份和恢复的计划. ...
随机推荐
- Trees on the level UVA - 122 (二叉树的层次遍历)
题目链接:https://vjudge.net/problem/UVA-122 题目大意:输入一颗二叉树,你的任务是按从上到下,从左到右的顺序输出各个结点的值.每个结点都按照从根节点到它的移动序列给出 ...
- Java基础11-数组
1.使用数组步骤: (1)声明数组 int[] a; (2)分配空间 a=new int[5]; (3)赋值 a[0]=1; int类型数组如果没有赋值,默认值为0,String类型数组默认为nul ...
- Murano Weekly Meeting 2015.11.04
Meeting time: 2015.November.4th 1:00~2:00 Chairperson: Serg Melikyan, PTL from Mirantis Meeting sum ...
- Java集合框架概述
集合框架指的是容器类.Java中大量持有对象的方式有数组和容器类两种方式.数组相较于容器类的优点在于:①随机访问效率高:由于是连续的存储空间,可以计算地址直接访问 ②类型确定:数组在创建时即可确定元素 ...
- PhpStorm快捷键设置,个性化设置,多项目共存,更改样式主题字体
自定义常用快捷键 按照路径:File -> Settings -> Appearance & Behavior -> Keymap -> Copy 一份 Eclipse ...
- Jersey实现文件上传下载
一 文件上传 使用ajaxFileUpload进行文件上传的前端处理.在ajaxFileupload.js中,针对服务端返回的类型增加text判断, //ajax文件上传 function ajaxF ...
- 新建mavent项目报错
1.找到自己项目 项目名\.settings\org.eclipse.wst.common.project.facet.core.xml 将<installed facet="jst. ...
- 了解委托(Delegate)
委托是一种全新面向对象语言特性,运行在.Net平台 基于委托,开发事件驱动程序变得非常简单 使用委托可以大大简化多线程变成的难度 理解委托 int a: //定义变量 a=100://给变量赋值 ...
- vue.js ------ 大牛和网站
hellogirl前端网站 : http://www.jqhtml.com/category/article FungLeo: http://blog.csdn.net/FungLeo/article ...
- cube.js 开源模块化分析框架
cube.js 是一款很不错的模块化web 应用分析框架.cube.js 的设计主要是面向serverless 服务, 但是同时也支持所有rdbms, cube.js不是一个单体应用,包含了以下部分: ...