代码之家  ›  专栏  ›  技术社区  ›  Chris McAtackney

Oracle默认值

  •  1
  • Chris McAtackney  · 技术社区  · 16 年前

    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。

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

    IF(varNumber IS NULL) THEN
       varNumber := 0;
    END IF;
    

    然而,有数百个函数可能会出现这个问题,更不用说每个函数都有大量的参数,因此如果我能找到一个更通用的解决方案,我更愿意这样做。

    3 回复  |  直到 16 年前
        1
  •  4
  •   Turnkey    16 年前

    使用NVL定义值。

    NVL( value_in, replace_with )
    
        2
  •  2
  •   Jim Hudson    16 年前

    不能将值指定给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;
    
        3
  •  1
  •   Rob Stevenson-Leggett    16 年前

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

    你可以这样写在一行中:

    varNumber = NVL(varNumber,0);