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

           定位符                                            命名符
-------------------------------------------------------------------------------------------------------------------------
更多依靠实际参数的适当名字来说明每个符号的作用      明确说明实际参数与形式参数的联系

用于形式参数和实际参数的名字是独立的;可以改变      可能更难维护,因为若形式参数的名字改变,使用
一个而不用修改另一个                                命名对过程的调用都要改变

因为若形式参数的顺序改变,使用定位符对过程的调      用于形式参数和实际参数的顺序是独立的;可以改变
用都要改变,所以可能更难维护                        一个而不用修改另一个

比命名符更简洁                                      需要更多的代码,因为形式参数和实际参数都被包括
                                                    在调用过程中
                                                   
带有缺省值的参数必须在参数列表的最后                允许形式参数使用缺省值,而不管哪个参数有缺省值
-------------------------------------------------------------------------------------------------------------------------

posted on 2017-08-23 17:30  djq002  阅读(286)  评论(0编辑  收藏  举报

导航