1

我有一个关于 Oracle 中 PL/SQL 函数的默认值的快速问题。以这个程序为例;

create or replace
FUNCTION testFunction
(
  varNumber IN NUMBER DEFAULT 0
)
RETURN NUMBER
AS
BEGIN
  dbms_output.put_line(varNumber);
  RETURN varNumber;
END;

这里的想法是,如果在调用此函数时没有为 varNumber 指定值,那么它将采用 0 的值。

现在,我的问题是我的函数是从一个 Web 服务层调用的,该层总是将 NULL 作为它没有值的参数的值传递。Oracle 将 NULL 解释为一个值,因此不会将 varNumber 初始化为其默认值 0。

我可以看到为什么这种方法是有意义的,但我想知道是否有一种方法可以覆盖这种行为,并使其在传递 NULL 值时使 Oracle 分配显式 DEFAULT 值,该值在函数头?

我已经考虑过进行手动检查的选项...

IF(varNumber IS NULL) THEN
   varNumber := 0;
END IF;

但是,有数百个函数可能会成为问题,更不用说每个函数有大量参数,所以如果我能找到更通用的解决方案,我会更喜欢它。

为您可以提供的任何见解而欢呼。

4

3 回答 3

4

使用 NVL 定义值。

NVL( value_in, replace_with )
于 2008-11-13T13:52:47.523 回答
2

您不能将值分配给 IN 参数,但您可以将它们设为 IN/OUT,然后设置它们。不过,这会带来很大的误用和混淆可能性。

所以我认为你最好使用局部变量。但是你可以在声明中做到这一点。那是,

create or replace
FUNCTION testFunction
(
  varNumber IN NUMBER DEFAULT 0
)
RETURN NUMBER
AS
  vFix number := nvl(varNumber,0);
BEGIN
  dbms_output.put_line(vFix);
  RETURN vFix;
END;
于 2008-11-13T14:50:31.087 回答
1

您的手动检查是安全地做您想做的事情的唯一方法。

不过,您可以在一行中这样写:

varNumber = NVL(varNumber,0);

祝你好运!

于 2008-11-13T13:54:22.993 回答