我有一个关于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;
但是,有数百个函数可能存在这个问题,不用担心每个函数有大量参数,所以如果我能找到一个更通用的解决方案,我更喜欢它。
为您提供的任何见解干杯。
答案 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);
祝你好运!