当前位置:  数据库>操作系统 iis7站长之家

SQL和PL/SQL中绑定变量的区别

    来源: 互联网  发布时间:2017-05-14

    本文导语: 在Oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析. 一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch...

在Oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析.

一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,严重的影响系统的规模的扩大(即限制了系统的并发行), 而且引起的问题不能通过增加内存条和cpu的数量来解决。之所以这样是因为门闩是为了顺序访问以及修改一些内存区域而设置的,这些内存区域是不能被同时修改。当一个sql语句提交后,oracle会首先检查一下共享缓冲池(shared pool)里有没有与之完全相同的语句,如果有的话只须执行软分析即可,否则就得进行硬分析。

而唯一使得oracle 能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是用于替代sql语句中的常量的替代变量。绑定变量能够使得每次提交的sql语句都完全一样。

1、sql中绑定变量
普通sql语句:
SELECT fname, lname, pcode FROM cust WHERE id = 674;
SELECT fname, lname, pcode FROM cust WHERE id = 234;
SELECT fname, lname, pcode FROM cust WHERE id = 332;
含绑定变量的sql 语句:
SELECT fname, lname, pcode FROM cust WHERE id = :cust_no;
Sql*plus 中使用绑定变量:
sql> variable x number;
sql> exec :x := 123;
sql> SELECT fname, lname, pcode FROM cust WHERE id =:x;
 
2、pl/sql
pl/sql很多时候都会自动绑定变量而无需编程人员操心,引用变量即是引用绑定变量,即很多你写得sql语句都会自动利用绑定变
量,如下例所示:
create or replace procedure dsal(p_empno in number)
as
begin
update emp
set sal=sal*2
where empno = p_empno;
commit;
end;
/
也许此时你会想要利用绑定变量来替代p_empno,但是这是完全没有必要的,因为在pl/sql中,引用变量即是引用绑定变量。

但当且要多次重复执行时,也需要动态绑定变量:

DECLARE

c_temp site%ROWTYPE;
TYPE cursortype IS REF CURSOR;
cur_temp cursortype;
BEGIN
LOOP
FETCH cur_temp
INTO c_temp;
EXIT WHEN cur_temp%NOTFOUND;
END LOOP;
CLOSE cur_temp;
COMMIT;
END;

    
 
 

您可能感兴趣的文章:

  • Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)
  • 可视化Swing中JTable控件绑定SQL数据源的两种方法深入解析
  • Sql学习第一天——SQL 将变量定义为Table类型(虚拟表)
  • SqlServer中用exec处理sql字符串中含有变量的小例子
  • SQL Server表变量与临时表的区别
  • Shell脚本调用Sql脚本并向其中传递变量
  • 谁能告诉我 sql server 2000 jdbc驱动程序应该怎么设置,如果设环境变量怎么设,谢谢!
  • 一个方法中,用Connection con变量连接数据库,执行完sql以后,关闭con,返回resultset,报错“关闭的连接: next”
  • sql server使用变量动态命名临时表表名的例子
  • sql server 表变量与临时表
  • Sql Server遍历表记录的二种方法(表变量与游标)
  • SQL中WHERE变量IS NULL条件导致全表扫描问题的解决方法
  • SQL Server遍历表中记录的2种方法(使用表变量和游标)
  • sql 表变量与临时表的实例解析
  • 怎样把变量代进SQL语句
  • 在sql查询中使用表变量
  • SQL Server中临时表与表变量用法区别
  • 关于SQL 存储过程入门基础(变量)
  • sql中参数过多利用变量替换参数的方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • PL/SQL Developer 10.0发布
  • Toby's PL/SQL Editor
  • Orcale 数据库客户端PL/SQL 中文乱码的问题解决方法
  • Oracle中在pl/sql developer修改表的2种方法
  • 用oracle pl/sql 从A unix机器,去读取B unix机器上的一个文件,怎么实现?
  • oracle中如何用PL/SQL打开一个指定的库,并在屏幕上列出库中的所有表?
  • 解析PL/SQL Developer导入导出数据库的方法以及说明
  • Oracle中PL/SQL中if语句的写法介绍
  • 64位win7下pl/sql无法连接oracle解决方法
  • PL/SQL编程经验小结开发者网络Oracle
  • http://www.ddtong.com/Sql.pl?nId=871609&csId=340387&cName=%bd%af%d3%ee%d6%c7,name如何转化成中文(直接java代码)
  • 在Oracle PL/SQL中游标声明中表名动态变化的方法
  • Oracle PL/SQL入门案例实践
  • Oracle使用PL/SQL操作COM对象
  • Oracle中的存储过程在pl/sql和java中如何调用
  • Oracle数据库编写PL/SQL代码经验谈
  • PL/SQL Number数字类型函数
  • PL/SQL Dev连接Oracle弹出空白提示框的解决方法分享
  • ORACLE PL/SQL 触发器编程篇介绍
  • [Oracle新手教程] 用PL/SQL画直方图
  • Oracle PL/SQL入门慨述
  • java命名空间java.sql接口statement的类成员方法: executeupdate定义及介绍
  • 请问,这是什么错误!java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][Named Pipes]??????? SQL Server?虽然分少,但一定给,只要您是前5名回复者中最好的以为!
  • java命名空间java.sql接口connection的类成员方法: nativesql定义及介绍
  • SQL查询分析工具 SQL Workbench/J
  • java命名空间java.sql接口preparedstatement的类成员方法: executeupdate定义及介绍
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • SQL Server统计SQL语句执行时间的脚本
  • java命名空间java.sql接口ref的类成员方法: getbasetypename定义及介绍
  • SQL客户端软件 PKLite SQL Client


  • 站内导航:


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

    ©2012-2021,