日期:2014-05-17  浏览次数:20802 次

简单的一个函数,仅仅涉及到空字符穿的比较,可结果不对,帮忙看看
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,不知道怎么原因。


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


------解决方案--------------------
oracle中对null的判断只能用is null 或 is not null,其余的都不行,就是用null=null都不可以。
------解决方案--------------------
' '不等于null 这个需要注意的