Oracle默认值
我有一个关于Oracle中PL/SQL函数的默认值的快速问题。以这个项目为例,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的值 现在,我的问题是
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;