2008-11-13 140 views
1

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

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; 

不过,也有数以百计的功能,在这可能是一个问题,更不用说大量的每个函数的参数,等等如果我能找到更一般的解决方案,我更喜欢它。

欢迎您提供任何见解。

回答

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; 
4

使用NVL定义值。

NVL(value_in, replace_with) 
1

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

你可以写在这样虽然一行:

varNumber = NVL(varNumber,0); 

祝你好运!