Oracle变量定义的三种方式definevariabledeclare.docx
《Oracle变量定义的三种方式definevariabledeclare.docx》由会员分享,可在线阅读,更多相关《Oracle变量定义的三种方式definevariabledeclare.docx(13页珍藏版)》请在冰豆网上搜索。
![Oracle变量定义的三种方式definevariabledeclare.docx](https://file1.bdocx.com/fileroot1/2023-7/3/6a4b5145-a55b-4dfb-8922-6107819d4e43/6a4b5145-a55b-4dfb-8922-6107819d4e431.gif)
Oracle变量定义的三种方式definevariabledeclare
1、define(即host变量)
Host变量主要作用是起到一个替代变量的作用,是主机环境可以和oracle进行交互的一个媒介。
通过define定义host变量的时候必须指定变量名和变量的值,如果变量名已经存在于host变量中,则自动覆盖,这个值不可以指定类型,一律按char存储。
DEFINE变量只在当前session环境中有效。
(1).语法:
definevariable_name=value
(2).声明和初始化DEFINE变量
//声明define变量的时候必须同时初始化赋值变量
SQL>definenum=1;
另外可以使用define命令显示单个(definevariable_name,不能显示多个)或全部(define)的host变量的值和类型(类型都是char)。
(3).显示指定的DEFINE变量值和类型
//使用definedef_name命令显示指定DEFINE变量
//的值和类型(DEFINE变量类型都为char)
SQL>definenum;
DEFINEnum ="1"(CHAR)
(4).显示所有的DEFINE变量值和类型
//使用define显示所有DEFINE变量的值和类型(DEFINE变量类型都为char)
SQL>define
DEFINE_CONNECT_IDENTIFIER="TOPPROD"(CHAR)
DEFINE_SQLPLUS_RELEASE="902000100"(CHAR)
DEFINE_EDITOR ="Notepad"(CHAR)
DEFINE_O_VERSION ="OracleDatabase11gEnterpriseEditionRelease11.2.0.3.0-64bitProducti
WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions"(CHAR)
DEFINE_O_RELEASE ="1102000300"(CHAR)
了解对于host变量启用和关闭的命令是:
setdefineon和setdefineoff。
(5).关闭DEFINE变量定义功能
//关闭define
SQL>setdefineoff;
SQL>definenum=1;
SQL>select*fromocc_filewhererownum=#
select*fromocc_filewhererownum=&num
ORA-01008:
并非所有变量都已绑定
(6).开启DEFINE变量定义功能
//打开define
SQL>setdefineon;
SQL>definenum=1;
SQL>select*fromocc_filewhererownum=#
OCC01 OCC02
-------------------------
020040 松荣五金-SRWJ
(7).引用DEFINE变量
这在sqlplus和plsqldeveloper的commandwindow中都可以使用,在sql或plsql中引用host变量,使用&符号,相当于一个简单的替换动作,比如
//错误案例
SQL>definex=occ_file;
SQL>select*from'&x'whererownum=1;
select*from'occ_file'whererownum=1
ORA-00903:
表名无效
SQL>
报错是因为x被替换为occ_file,语句变为select*from’occ_file’,’occ_file’表是不存在的,多了个单引号。
//正确案例
SQL>definex=occ_file;
SQL>select*from&xwhererownum=1;
OCC01OCC02
-------------------------
020040松荣五金-SRWJ
SQL>
(8).引用临时DEFINE变量
可以不预先声明初始化define变量,直接在sql或plsql中在字符串前面加&符号,会提示你输入变量的值,然后替换。
这种情况下是临时的变量,define命令查不到
//不预先声明和初始化define变量直接使用&引用
SQL>select*from&ywhererownum=1;
//弹框提示输入变量y的值,输入occ_file,后打印出一下信息
OCC01 OCC02
-------------------------
020040 松荣五金-SRWJ
SQL>
经常使用host变量的场合是在写脚本的时候,脚本的有些地方经常变化,其他地方固定,那么可以使用&引用。
2、Variable(即邦定变量)
绑定变量主要是在sql中使用,达到sql解析一次,执行多次,从而提高效率的目的。
绑定变量和host变量一样,也有定义的,也有临时性的。
(临时性的在动态sql或动态plsql中通过占位符和using使用),其他的如sql会自动使用绑定变量的情况,此处不专门讨论。
定义的绑定变量也是在当前session中有效。
绑定变量以下特点:
绑定变量在sql和plsql中直接引用必须加前缀:
。
如要引用绑定变量a,则是:
a;
在真正运行的PLSQL程序中,比如自动运行,有自己的一套机制;
初始化和应用绑定变量,初始化定义的绑定变量,可以使用过程和函数,其中过程可以内部给绑定变量赋值、也可以参数是绑定变量,参数模式为out返回。
使用函数和过程差不多,还可以使用call
函数来赋值。
sqlplus中可以使用大于等于3个字符表示一个命令,这里我们用var,var命令是声明一个绑定变量,只能给予名称和类型,定义的时候不能赋值,赋值可以在plsql中或者采用函数赋值(而host变量定义的时候必须赋值)。
(1).语法:
varvar_nametype
(2).声明绑定变量
//使用var声明两number类型的变量num1、num2
SQL>varnum1number;
SQL>varnum2number;
(3).显示指定绑定变量
//varnum1命令显示指定绑定变量名称、数据类型
SQL>varnum1
variablenum1
datatypeNUMBER
SQL>
(4).显示所有绑定变量
//var命令显示所有绑定变量的变量名称、数据类型
SQL>var
variablenum1
datatypeNUMBER
variablenum2
datatypeNUMBER
(5).使用PL/SQL初始化绑定变量
//给绑定变量赋值
SQL>begin
:
num1:
=1;
:
num2:
=2;
end;
/
PL/SQLproceduresuccessfullycompleted
num1
---------
1
num2
---------
2
SQL>
(6).使用EXECUTE初始化绑定变量
//使用execute初始化,初始化多个用分号隔开
SQL>exec:
num1:
=1;:
num2:
=2
PL/SQLproceduresuccessfullycompleted
num1
---------
1
num2
---------
2
SQL>
(7).显示指定的绑定变量的值
//使用printvar_name命令输出指定的绑定变量值
SQL>printnum1;
num1
---------
1
SQL>printnum2;
num2
---------
2
(8).显示所有绑定变量的值
//print命令输出所有绑定变量的值
SQL>print
num1
---------
1
num2
---------
2
SQL>
(9).引用绑定变量
//使用:
var_name引用绑定变量
SQL>select:
num1fromdual;
:
NUM1
----------
1
num1
---------
1
SQL>
(10).存储过程初始化绑定变量
//声明绑定变量m
SQL>varmnumber;
//创建一个带输出参数的存储过程test_pro
SQL>createorreplaceproceduretest_pro(numoutnumber)