Oracle默认值

时间:2008-11-13 13:48:01

标签: oracle stored-procedures plsql

我有一个关于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;

但是,有数百个函数可能存在这个问题,不用担心每个函数有大量参数,所以如果我能找到一个更通用的解决方案,我更喜欢它。

为您提供的任何见解干杯。

3 个答案:

答案 0 :(得分:4)

使用NVL定义值。

NVL( value_in, replace_with )

答案 1 :(得分: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;

答案 2 :(得分:1)

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

你可以在这样的一行中写出:

varNumber = NVL(varNumber,0);
祝你好运!