Sqlplus中可以使用大于等于3个字符表示一个命令,这里我们用var,var命令是声明一个绑定变量,只能给予名称和类型,定义的时候不能赋值,赋值可以在plsql中或者采用函数赋值(而host变量定义的时候必须赋值)。
Var var_name type 声明一个指定类型的绑定变量,类型上面列表中已经列出。
###使用execute初始化,初始化多个用分号隔开
SQL> var x number;
SQL> var y number;
SQL> exec
:=1; :y :=2;
PL/SQL procedure successfully completed
x
---------
1
y
---------
2
下面看下NULL值赋值给绑定变量,会报错
WORKGROUP\DINGJUN-PC>exec :a:='aa',:b:=null;
BEGIN :a:='aa',:b:=null; END;
再如下面的例子,使用过程返回绑定变量,定义一个Var x number;
WORKGROUP\DINGJUN-PC>var x number;
WORKGROUP\DINGJUN-PC>Create or replace procedure pt( m out number)
2 As
3 Begin
4 m:=10;
5 End;
6 /
WORKGROUP\DINGJUN-PC>var x refcursor;
WORKGROUP\DINGJUN-PC>create or replace procedure pt(cur out SYS_REFCURSOR)
2 AS
3 BEGIN
4 OPEN cur for select * from test where rownum<3;
5 END;
6 /
过程已创建。
WORKGROUP\DINGJUN-PC>exec pt(cur =>);
PL/SQL 过程已成功完成。
WORKGROUP\DINGJUN-PC>print x
SJ ID
---- ----------
01 1
02 2
由上面可以知道,print可以直接把refcursor的结果打印出来,不需要迭代查找。
下面看看如何用函数初始化定义的绑定变量:
WORKGROUP\DINGJUN-PC>create or replace function concatestring(a in varchar2, b in varchar2) return varchar2
2 as
3 c varchar2(100);
4 begin
5 c := a||b;
6 return c;
7 end;
8 /
函数已创建。
WORKGROUP\DINGJUN-PC>variable x varchar2(10);
WORKGROUP\DINGJUN-PC>call concatestring('a','b') into;
调用完成。
WORKGROUP\DINGJUN-PC>print x
X
----------------------------------------------------------------
ab
当然也可以将函数的参数定义为out模式来初始化,我们这里使用call命令调用函数把结果传给绑定变量,调用格式为:call function(参数列表) into :绑定变量。