【PLSQL】绑定变量,活跃SQL,软硬解析解析
************************************************************************ ****原文:blog.csdn.net/clark_xu 徐长亮的专栏 ************************************************************************
1.1 变量
在匿名块或者存储过程中定义的变量为局部变量,及作用域在整个匿名块或存储过程中。执行结束,则该变量就不存在了;
绑定变量
在PLSQL的SQL中直接私有绑定变量:bv_name,不须要定义
1.1.1
绑定变量的定义
--绑定变量的定义
variable I number
begin
for I in 1 .. 1000 loop
execute immediate ‘insert into test values(:i)’ using I;
:I :=I; ---绑定变量的赋值
end loop
dbms_output.put_line(:i);
commit;
end;
print i
exec :i=:=10000 --- 绑定变量的赋值
print :I;
3.3 PLSQL的SQL分类
静态SQL:
--在PLSQL块中使用的SQL语句在编译的时候是明白的,SQL语句在PLSQL编辑阶段编译。
动态SQL:
--PLSQL编译时SQL是不确定的,如依据用户输入參数的不同而运行不同的操作。
编译程序对动态语句不处理。在执行的时候,动态创建SQL语句
3.3.1 静态SQL
--一次硬分析,一次软分析。1000次运行
create or replace procedure proc1
ls
begin
for I in 1 .. 1000 loop
insert into test values(I);
end loop;
commit;
end;
begin proc1 end;
3.3.2 本地动态SQL(未使用绑定变量)
1000此硬分析,1000此软分析,1000次运行
create procedure proc1 ls
begin
for I In 1 ..1000 loop
execute immediate ‘insert into test values(‘||I||’)’;
end loop;
commit;
end;
---编译过程的时候,不编译sql语句
begin proc1 end;
3.3.3 本地动态SQL(使用绑定变量)
--1次硬分析。1000次软分析。1000次运行
create procedure proc1 ls
begin
for I In 1 ..1000 loop
execute immediate ‘insert into test values(:i)’ using i;
end loop;
commit;
begin proc1 end;
3.4 SQL语句的处理过程
语法检查:syntax check
语义检查:semantic check
--诸如检查sql语句中的訪问对象是否存储,该用户是否具备对应的权限。
对sql语句进行解析parse
--利用内部算法对sql进行解析,生成解析树(parse tree)及运行计划(execution plan)
运行sql,返回结果:execute and return;
3.4.1 硬解析和软解析
oracle利用内部hash算法来获得该sql的hash值。然后在library
cache里查找是否存在该hash值;
如果存在,则将此sql与cache中的进行比較;如果“同样”。就将利用已有的解析数和运行计划,而忽略了优化器的相关工作,这就是软解析的过程。
假设上面两个降低中任由一个不成立,那么优化器都将进行创建解析树,生成运行计划的动作,这个过程都叫硬解析;
3.5 相应存储过程的操作
创建并编译过程:
create or replace procedure
编译过程
alter procedure procname compile;
调用过程
用匿名子程序调用,直接写过程名
用有名子程序调用,直接写过程名。
删除过程:
drop procedure
3.5.1 过程的使用案例
创建存储过程
create or replace procedure p_account
(p_id number,p_realname out varchar2,p_age out number)
ls
begin
select real_name,round((sysdate-birthdate)/360) into p_realname,p_age
from account
where id=p_id;
exception
when no_data_found then
p_realname :=’no account’;
p_age:=0;
end;
有名子程序调用:
declare
v_realname varchar2(20);
v_age number;
begin
p_account(1011,v_realname,v_age);
dbms_output.put_line(v_realname || ‘’ || v_age);
end;
匿名子程序调用,绑定变量:
variable b_realname varchar2(20)
variable b_age number
begin
p_account(1011,:b_realname,:b_age);
end;
print b_realname;
print b_age;
3.6 PLSQL中的静态sql
oracle在解析sql时候会把PLSQL中定义的变量转为绑定变量insert into test values(:b1),降低硬解析的次数;
server process将运行完的sql cache起来,不关闭,当再运行sql。不须要软解析;
过程中的參数会自己主动转化为绑定变量。
************************************************************************ ****原文:blog.csdn.net/clark_xu 徐长亮的专栏 ************************************************************************版权声明:本文博主原创文章,博客,未经同意不得转载。
【PLSQL】绑定变量,活跃SQL,软硬解析解析的更多相关文章
- 使用EXECUTE IMMEDIATE来生成含有绑定变量的SQL
一个SQL,通过SPM固定它的执行计划,可以通过DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE实现.也可以通地此功能在不修改原SQL的情况下对其加HINT来固定执行计划.D ...
- 包含绑定变量的sql进行调优需注意一点
拿1个sql举个例子,我只贴出了where后面部分 实际环境中有init_date 和direct_no的组合索引IDX_DATE_NO 上诉标红处,:b3=0 和:b3<>0这两种情况o ...
- Oracle SQL调优之绑定变量用法简介
目录 一.SQL执行过程简介 二.绑定变量典型用法 2.1.在SQL中绑定变量 2.2.在PL/SQL中使用绑定变量 2.3.PL/SQL批量绑定变量 2.4.Java代码里使用绑定变量 最近在看&l ...
- PLSQL使用绑定变量
想对一个sql做10046trace,结果因为10g数据库无法对sql_id做,只能使用绑定变量的方法,下面sql是如何使用绑定变量运行sql的语句 declare v_sql VARCHAR2( ...
- [转]ORACLE 绑定变量用法总结
转:http://blog.csdn.net/wanghai__/article/details/4778343 在oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析 ...
- ORACLE 绑定变量用法总结 .
之前对ORACLE中的变量一直没个太清楚的认识,比如说使用:.&.&&.DEIFINE.VARIABLE……等等.今天正好闲下来,上网搜了搜相关的文章,汇总了一下,贴在这里,方 ...
- OTL翻译(5) -- otl_stream流相关绑定变量
声明绑定变量 本章节将详细的说明如何在otl_stream流里面声明绑定变量. SQL语句.SQL语句块或存储过程在程序里面使用的时候总是带有占位符.OTL里面带有一个小的解析器用来解析这些占位符,并 ...
- otl_stream流相关绑定变量
声明绑定变量 本章节将详细的说明如何在otl_stream流里面声明绑定变量. SQL语句.SQL语句块或存储过程在程序里面使用的时候总是带有占位符.OTL里面带有一个小的解析器用来解析这些占位符,并 ...
- ORACLE绑定变量隐式转换导致性能问题
年后一次系统升级后,监控数据库的工具DPA发现数据库的Total Wait时间突然飙增,如下截图所示,数据库的总体等待时间对比升级前飙增了非常多 另外就是发现出现了较多的等待事件,主要有latch: ...
随机推荐
- Unity3D NGUI,uGUI总结
跪求官方UI系统(2014年11月底已出,用原生的比用NGUI放心) uGUI注意点 1.要防止多个canvas叠加点击穿透,canvas里面的graphics raycaster调整到恰当选项 2. ...
- HOOK自绘原理 good
做“HOOK文件打开/保存对话框”的过程中,我首先研究了界面库的相关知识.界面库一般都是由C/C++这种中低级语言编码,这是因为在Windows下的界面库实现技术大都以直接操作控制Windows的消息 ...
- Spark大型项目实战:电商用户行为分析大数据平台
本项目主要讲解了一套应用于互联网电商企业中,使用Java.Spark等技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.页面跳转行为.购物行为.广告点击行为等)进行复杂的分析.用统计分 ...
- UVA 565 565 Pizza Anyone? (深搜 +位运算)
Pizza Anyone? You are responsible for ordering a large pizza for you and your friends. Each of th ...
- CMDeviceMotion使用
CMDeviceMotion使用 by 吴雪莹 manager = [[CMMotionManager alloc] init]; ViewController *__weak weakSelf=se ...
- Swift - 类型判断is 与 类型转换as
在Swift中,通常使用is和as操作符来实现类型检查和转换.下面通过样例来演示使用方法,首先定义几个类. 1 2 3 4 5 6 7 8 9 10 11 //基类,人类 class Human{ } ...
- <摘录>详谈高性能UDP服务器的开发
上一篇文章我详细介绍了如何开发一款高性能的TCP服务器的网络传输层.本章我将谈谈如何开发一个高性能的UDP服务器的网络层.UDP服务器的网络层开 发相对与TCP服务器来说要容易和简单的多,UDP服务器 ...
- [置顶] dubbo管理控制台安装
dubbo管理控制台开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能. 1.下载dubbo 地址:http://code.alibabatech.com/mvn ...
- Makefile条件推断 ——————————【Badboy】
使用条件推断,能够让make依据执行时的不同情况选择不同的执行分支. 条件表达式能够是比較变量的值,或是比較变量和常量的值. 一.演示样例 以下的样例,推断$(CC)变量是否"gcc&quo ...
- 大话项目管理工具之Confluence篇
前言 前面的两篇文章,讲的都是代码层次上的项目管理工具.这篇文章打算介绍一下关于知识管理的工具,当然,它也属于项目管理中的一部分.说到知识管理,你想到了什么呢?织网?找节点?不错,这是个人的知识管理. ...