比较参量和参数列表

当用 CREATE PROCEDURE 或 CREATE FUNCTION 创建或注册一个 UDR 时,用 UDR 要求的参数名和数据类型声明一个参数列表。(对于用 C 或 Java™ 语言编写的外部例程,参数名是可选的。)有关声明参数的详细信息,请参阅例程参数列表

如果不同的例程具有相同的标识符但是声明的参数个数不同,用户定义的例程可以是过载的。有关重载的更多信息,请参阅 例程重载以及例程签名

如果试图以超出 UDR 要求的参量来执行 UDR ,就会接收到一条错误消息。

如果已少于 UDR 要求的参量来调用 UDR,那么就可以将省略的参量说成缺少。数据库服务器将缺少的参量初始化为它们相应的缺省值。这个初始化过程发生在 UDR 主体中第一条可执行语句之前。

如果缺少的参量没有缺省值。则 GBase 8s 发出错误。

已命名的参数不能用于调用在它们的例程特征符中重载数据类型的 UDR。只有例程的特征符具有不同数量的参数时,命名的参数用于解析非唯一的例程名称才是有效的:
         func( x::integer, y );    -- VALID if only these 2 routines
        func( x::integer, y, z ); -- have the same 'func' identifier
        
        func( x::integer, y );    -- NOT VALID if both routines have
        func( x::float, y ;       -- same identifier and 2 parameters
对于顺序和命名的参数,如果两个或更多的 UDR 特征符具有多个数目的缺省值,则会执行参数最少的例程:
         func( x, y default 1 )
        func( x, y default 1, z default 2 )
如果两个同时称作 func 的已注册的 UDR 具有以上所示的特征符,那么语句 EXECUTE func(100) 调用 func(100,1)

不能使用命名的参数提供缺省值的子集,除非这些参数遵循例程特征符的位置顺序。即,不能跳过一些参量而依赖于数据库服务器提供它们的缺省值。

例如,给定以下特征符:
         func( x, y default 1, z default 2 )
可执行:
        func( x=1, y=3 )
但不能执行:
         func( x=1, z=3 )