PL/SQL函数中的参数说明带有输入和输出描述,需要在编译时刻进行处理,并对调用时的参数类型是否相容进行检查。但在PL/SQL过程和函数的声明中,限制CHAR、VARCHAR2参数的长度以及限制NUMBER的精度都是非法的。这是由于在调用一个函数时,实际参数的取值被传递进去,在函数内部通过使用形式参数来引用这些实现参数,不仅实现数值被传递进去,而且作为参数传递机制的一部分,对于这些变量的限制也就传递进去。例如:
创建函数:
CREATE OR REPLACE FUNCTION ParameterLength(p_Varl IN OUT VARCHAR2)
RETURN VARCHAR2 AS
BEGIN
p_Var1:=‘This is an example‘;
RETURN p_Var1;
END ParameterLength;
调用函数:
DECLARE
v_Variable1 VARCHAR(30);
v_Variable2 VARCHAR(30);
BEGIN
v_Variable2:=ParameterLength (v_Variable1);
END;
上述调用将使p_Var1变量的最大长度为30(来自实参)。而如果将v_Variable1的长度定义成10,将产生错误。这个错误的产生不是过程设计不好,而是因为调用该过程的代码发生了问题。值得注意的是:在过程定义中如果使用%TYPE作为作参类型的限制,而基准类型又是受限的,那么该限制将作用于形式参数而不实际参数。
在缺省参数值的处理方式上,即当调用时,没有指时实际值时,就用缺省值。对使用缺省值的形式参数,通常需要把它们放到参数表的末尾,这样无论使用位置标识法还是带名标识法都可以。 3 GKD-Base存储函数实现的关键技术
3.1 函数管理器
GKD-Base PL/SQL引擎对PL/SQL程序的解释执行都通过一个内部统一的入口,解释器把语法树载入到入口内部的一个默认的主控函数,由这个函数驱动对其解释执行。这样处理的主要目的是为了兼容子程序的语法分析和保持解释器运转机制的一致性。因为子程序就是PL/SQL程序中命名的语句块,用户调用子程序时,PL/SQL引擎可以再次调用内部主控函数对其进行处理,并提交解释器执行。