create or replace function GET_DNZW(AZGID INTEGER, AYEAR varchar2) return varchar2 is
  Result varchar2(20);
BEGIN
DECLARE
  ACXNX varchar2(4) := '';
BEGIN
  ACXNX := AYEAR;
  IF ACXNX = '' THEN ACXNX := '2007'; END IF;
  
  RESULT := ACXNX;
  
  return(RESULT);
END;
END GET_DNZW;SELECT GET_DNZW(1, '') FROM DUAL 用这个语句调用,应该出来的是2007,可是结果为空字符串,我试了以下,这个if语句就是为false,不知道怎么原因。

解决方案 »

  1.   

    IF ACXNX = '' THEN ACXNX := '2007'; END IF;
    改成
    IF ACXNX is null THEN ACXNX := '2007'; END IF;
    在Oracle里,没有空字符串,只有空值 NULL
    NULL就是'',这两者是等价的,是一样的
      

  2.   

    oracle中对null的判断只能用is null 或 is not null,其余的都不行,就是用null=null都不可以。
      

  3.   

    ''不等于null 这个需要注意的