************************************************************************
  ****原文: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,软硬解析解析的更多相关文章

  1. 使用EXECUTE IMMEDIATE来生成含有绑定变量的SQL

    一个SQL,通过SPM固定它的执行计划,可以通过DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE实现.也可以通地此功能在不修改原SQL的情况下对其加HINT来固定执行计划.D ...

  2. 包含绑定变量的sql进行调优需注意一点

    拿1个sql举个例子,我只贴出了where后面部分 实际环境中有init_date 和direct_no的组合索引IDX_DATE_NO 上诉标红处,:b3=0 和:b3<>0这两种情况o ...

  3. Oracle SQL调优之绑定变量用法简介

    目录 一.SQL执行过程简介 二.绑定变量典型用法 2.1.在SQL中绑定变量 2.2.在PL/SQL中使用绑定变量 2.3.PL/SQL批量绑定变量 2.4.Java代码里使用绑定变量 最近在看&l ...

  4. PLSQL使用绑定变量

    想对一个sql做10046trace,结果因为10g数据库无法对sql_id做,只能使用绑定变量的方法,下面sql是如何使用绑定变量运行sql的语句 declare  v_sql  VARCHAR2( ...

  5. [转]ORACLE 绑定变量用法总结

    转:http://blog.csdn.net/wanghai__/article/details/4778343 在oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析 ...

  6. ORACLE 绑定变量用法总结 .

    之前对ORACLE中的变量一直没个太清楚的认识,比如说使用:.&.&&.DEIFINE.VARIABLE……等等.今天正好闲下来,上网搜了搜相关的文章,汇总了一下,贴在这里,方 ...

  7. OTL翻译(5) -- otl_stream流相关绑定变量

    声明绑定变量 本章节将详细的说明如何在otl_stream流里面声明绑定变量. SQL语句.SQL语句块或存储过程在程序里面使用的时候总是带有占位符.OTL里面带有一个小的解析器用来解析这些占位符,并 ...

  8. otl_stream流相关绑定变量

    声明绑定变量 本章节将详细的说明如何在otl_stream流里面声明绑定变量. SQL语句.SQL语句块或存储过程在程序里面使用的时候总是带有占位符.OTL里面带有一个小的解析器用来解析这些占位符,并 ...

  9. ORACLE绑定变量隐式转换导致性能问题

    年后一次系统升级后,监控数据库的工具DPA发现数据库的Total Wait时间突然飙增,如下截图所示,数据库的总体等待时间对比升级前飙增了非常多 另外就是发现出现了较多的等待事件,主要有latch: ...

随机推荐

  1. 一个能够自己主动生成静态库,自己主动安装程序的Makefile

    .PHONY:clean install CC=g++ CFLAGS=-Wall -g BIN=libecho.a INCLUDE=echo SRC=src OBJS=Socket.o Rio.o T ...

  2. C中的几组指针

    1.二维数组 下面就三种二维数组进行说明. 1: int **Ptr; 2: int *Ptr[ 5 ]; 3: int ( *Ptr )[ 5 ]; 以上三例都是整数的二维数组,都可以用形如 Ptr ...

  3. ExtJs4 笔记(13) Ext.menu.Menu 菜单、Ext.draw.Component 绘图、Ext.resizer.Resizer 大小变更

    本篇讲解菜单.绘图.还有大小变更控件.菜单控件可以附加到各种其他控件中,比如按钮.工具栏等,甚至可以直接通过通过右键打开(模拟右键菜单):ext对绘图的支持可以让我们通过js来绘图:大小变更控件可以让 ...

  4. HDU 4876 ZCC loves cards _(:зゝ∠)_ 随机输出保平安

    GG,,,g艹 #include <cstdio> #include <iostream> #include <algorithm> #include <st ...

  5. 与众不同 windows phone (8) - Tile(磁贴)

    原文:与众不同 windows phone (8) - Tile(磁贴) [索引页][源码下载] 与众不同 windows phone (8) - Tile(磁贴) 作者:webabcd介绍与众不同 ...

  6. 关于IOCP,某些地方就是不让人彻底舒服(WSASend重叠post数据)

    开门见山,直接就事论事. 假如有这么一个基于IOCP模型的Server,这个Server提供的所有服务中有这么一种服务……文件下载,我们再假设Server端存有一个20G的文件,客户端这时发送一个请求 ...

  7. 搭建实时同步data guard的最高可用-切换主备

    搭建实时同步data guard的最高可用-切换主备 首先保证主库在归档模式下:错过N次了 准备二台机器(hostname gw hosts ech0)host-only [root@node1 ~] ...

  8. Android中网络流量控制(防火墙)——Iptables

    Iptables简单介绍 iptables是与最新的 2.6.x 版本号 Linux 内核集成的 IP 信息包过滤系统. 假设 Linux 系统连接到因特网或 LAN.server或连接 LAN 和因 ...

  9. 灵动标签的使用方法 ecms通过运行sql获取须要的记录

    在某些条件下,我们要求站点的某页上显示指定的信息, 可是这样的指定假设固定去用代码写死的话,对以后的修改将会是大麻烦: 这时候sql语句的优势就凸显出来,利用sql语句仅仅须要改改数字,就能让显示的内 ...

  10. codeforces 659C Tanya and Toys

    题目链接:http://codeforces.com/problemset/problem/659/C 题意: n是已经有的数字,m是可用的最大数字和 要求选自己没有的数字,且这些数字的数字和不能超过 ...