pl/sql关联符
定位符和命名符
create or replace procedure CallMe(p_ParameterA varchar2,
p_ParameterB number,
p_ParameterC boolean,
p_ParameterD date) as
begin
null;
end CallMe;
declare
v_Variable1 varchar2(10);
v_Variable2 number(7, 6);
v_Variable3 boolean;
v_Variable4 date;
begin
CallMe(v_Variable1, v_Variable2, v_Variable3, v_Variable4);
end;
实际参数通过位置与形式参数相关联:
v_Variable1与p_ParameterA相关联,
v_Variable2与p_ParameterB相关联,
v_Variable3与p_ParameterC相关联,
v_Variable4与p_ParameterD相关联,
这种变量叫做定位符(positional notation)。
也可以用命名符(named notation)来调用过程:
declare
v_Variable1 varchar2(10);
v_Variable2 number(7, 6);
v_Variable3 boolean;
v_Variable4 date;
begin
CallMe(p_ParameterA => v_Variable1,
p_ParameterB => v_Variable2,
p_ParameterC => v_Variable3,
p_ParameterD => v_Variable4);
end;
在命名符中,对于每一个参数,都包含了形式参数和实际参数。
这就允许在需要时重新整理参数的顺序。
declare
v_Variable1 varchar2(10);
v_Variable2 number(7, 6);
v_Variable3 boolean;
v_Variable4 date;
begin
CallMe(p_ParameterB => v_Variable2,
p_ParameterC => v_Variable3,
p_ParameterD => v_Variable4,
p_ParameterA => v_Variable1);
end;
定位符和命名符也可以在同一个调用中混合使用。
第一个参数必须通过定位符指定,而其余的参数可以根据名字指定。
declare
v_Variable1 varchar2(10);
v_Variable2 number(7, 6);
v_Variable3 boolean;
v_Variable4 date;
begin
CallMe(v_Variable1,
p_ParameterC => v_Variable3,
p_ParameterD => v_Variable4,
p_ParameterB => v_Variable2);
end;
--ok
declare
v_Variable1 varchar2(10);
v_Variable2 number(7, 6);
v_Variable3 boolean;
v_Variable4 date;
begin
CallMe(p_ParameterA => v_Variable1,
v_Variable2,
p_ParameterD => v_Variable4,
p_ParameterC => v_Variable3);
end;
--output
第 8 行出现错误:
ORA-06550: 第 8 行, 第 10 列:
PLS-00312: 一个定位相关参数没有说明其相关性
ORA-06550: 第 7 行, 第 3 列:
PL/SQL: Statement ignored
定位符 命名符
-------------------------------------------------------------------------------------------------------------------------
更多依靠实际参数的适当名字来说明每个符号的作用 明确说明实际参数与形式参数的联系
用于形式参数和实际参数的名字是独立的;可以改变 可能更难维护,因为若形式参数的名字改变,使用
一个而不用修改另一个 命名对过程的调用都要改变
因为若形式参数的顺序改变,使用定位符对过程的调 用于形式参数和实际参数的顺序是独立的;可以改变
用都要改变,所以可能更难维护 一个而不用修改另一个
比命名符更简洁 需要更多的代码,因为形式参数和实际参数都被包括
在调用过程中
带有缺省值的参数必须在参数列表的最后 允许形式参数使用缺省值,而不管哪个参数有缺省值
-------------------------------------------------------------------------------------------------------------------------