Oracle默认值

Oracle默认值,oracle,stored-procedures,plsql,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的值 现在,我的问题是

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

我可以理解为什么这种方法是有意义的,但我想知道是否有一种方法可以覆盖这种行为,并使其在传递空值时,导致Oracle分配在函数头中指定的显式默认值

我已经考虑过做手工检查的选择

IF(varNumber IS NULL) THEN
   varNumber := 0;
END IF;
然而,有数百个函数可能会出现这个问题,更不用说每个函数都有大量的参数,因此如果我能找到一个更通用的解决方案,我更愿意这样做


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

使用NVL定义值

NVL( value_in, replace_with )

使用NVL定义值

NVL( value_in, replace_with )

手动检查是安全完成所需操作的唯一方法

你可以这样写在一行中:

varNumber = NVL(varNumber,0);

祝你好运

手动检查是安全完成所需操作的唯一方法

你可以这样写在一行中:

varNumber = NVL(varNumber,0);

祝你好运

您不能将值指定给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;

不能将值指定给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;