设为首页 加入收藏

TOP

Oracle变量定义的三种方式(define,variable,declare)学习笔记(二)
2015-11-21 01:56:56 来源: 作者: 【 】 浏览:5
Tags:Oracle 变量 定义 方式 define variable declare 学习 笔记
num1 --------- 1 SQL> print num2; num2 --------- 2

(8).显示所有绑定变量的值

//print 命令输出所有绑定变量的值 SQL> print num1 --------- 1 num2 --------- 2 SQL> 

(9).引用绑定变量

//使用:var_name引用绑定变量 SQL> select :num1 from dual; :NUM1 ---------- 1 num1 --------- 1 SQL> 

(10).存储过程初始化绑定变量

//声明绑定变量m SQL> var m number; //创建一个带输出参数的存储过程test_pro SQL> create or replace procedure test_pro(num out number) as begin num:=10; end; / Procedure created //使用存储过程返回变量(引用绑定变量记得带上:) SQL> exec test_pro(num=>:m); PL/SQL procedure successfully completed m --------- 10 //输出绑定变量m的值 SQL> print m m --------- 10

(11).游标初始化绑定变量

绑定变量是REFCURSOR类型。一个参数使用refcursor,通过绑定变量类型定义为REFCURSOR,然后传入过程,打印绑定变量(效果和查询语句一样)。

//声明游标类型的绑定变量 //注意:在plsql dev的command window无法使用以下声明,需要再sqlplus中才有效 SQL> var curinfo refcursor //创建带输出参数,参数类型为sys_refcursor的存储过程 SQL> create or replace procedure cur_pro(cur_msg out sys_refcursor) as begin open cur_msg for select occ01,occ02 from occ_file where rownum<3; end; / Procedure created //exec执行存储过程 SQL> exec cur_pro(cur_msg=>:cur_info); PL/SQL 过程已成功完成。 //输出绑定变量cur_info的值 SQL> print cur_info OCC01 OCC02 --------------------------- 020040 松荣五金-SRWJ --------------------------- 020041 路得记-LDJ

由上面可以知道,print可以直接把refcursor的结果打印出来,不需要迭代查找。


(12).函数初始化绑定比那里

//创建函数 SQL> create or replace function test_fun(a in varchar2,b in varchar2) return varchar2 as c varchar2(255); begin c:=a||b; return c; end; / Function created //声明绑定变量fun_info SQL> var fun_info varchar2(255); //使用call调用函数将返回值赋值给绑定变量 SQL> call test_fun('a','b') into :fun_info; Method called fun_info --------- ab //显示绑定变量的值 SQL> print fun_info fun_info --------- ab 

当然也可以将函数的参数定义为out模式来初始化,我们这里使用call命令调用函数把结果传给绑定变量,

语法

call function(参数列表) into :绑定变量

pl/sql中的参数和定义的变量(包括全局变量和临时变量)都会内部转为绑定变量,所以尽量在pl/sql中尽量使用静态sql,而不要使用动态sql,如果使用动态sql,要尽量加上绑定变量。


(13).绑定变量的基本作用

绑定变量主要是sql的执行过程中,在解析sql之后会进行共享池(SGA)的检查,看优化器有没有分析优化过这个sql,环境必须完全一致才可以(包括大小写的一致,session情况一致等)。那么可以达到一次分析,多次执行的目的,这就是软解析,否则要经过解析,优化,行资源生成等一系列sql执行的过程,因为sql优化需要耗费很多资源,如果硬解析,sql性能会下降。

如果查询一跑几个小时,根本没必要做绑定变量,因为解析的消耗微乎其微,而且绑定变量对优化器判断执行路径也有负面影响。

看SGA中的sql是否是软解析被调用多次,可以查看v sql或v sqlarea视图,查看列sql_text,executions,如:

select sql_text,executions from v$sql where sql_text like '%trademark%'; SQL_TEXT EXECUTIONS<被执行的次数> select * from trademark where id=:tid 6


3、declare

查看Oracle PL/SQL语句基础学习笔记(上)-3、声明部分

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇oraclebetweenand边界问题 下一篇OracleRAC安装过程中碰到的“坑”..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: