变量X,Y存储的 都可能是NULL,也可能 是任何字符。存储过程中有如下代码:DECLARE
  x VARCHAR2(1); 
  y VARCHAR2(1); 
BEGIN
  IF NVL(x,'')=NVL(y,'') THEN
    dbms_output.put_line('YES');
  ELSE
    dbms_output.put_line('NO');
  END IF;
END;判断失效了输出的No,而不是YES。需要强调的是,由于X和Y可能是任何字符,也可能都是NULL。
所以只能写NVL(x,''),而不能写成NVL(x,'某个字符')来替代。

解决方案 »

  1.   


    --需加个空格,oracle会默认把''当作null
    DECLARE
      x VARCHAR2(1);  
      y VARCHAR2(1);  
    BEGIN

      IF NVL(x,' ')=NVL(y,' ') THEN
      dbms_output.put_line('YES');
      ELSE
      dbms_output.put_line('NO');
      END IF;
    END;
    /
      

  2.   

    DECLARE
      x VARCHAR2(1);  
      y VARCHAR2(1);  
    BEGIN
      IF (x is null and y is null) or x=y THEN
        dbms_output.put_line('YES');
      ELSE
        dbms_output.put_line('NO');
      END IF;
    END;
      

  3.   

    To:zhangandli需要强调的是,由于X和Y可能是任何字符,也可能都是NULL。
    所以只能写NVL(x,''),而不能写成NVL(x,'某个字符')来替代。你的方法不行的To:fw0124
    貌似可以,我再看看有没有潜在bug哈
      

  4.   

    To:fw0124
    你这个判断,如果是等号的时候没问题要是不等号的时候,应该写成什么样子?
      

  5.   


    --不等的情况,还真没太在意过,呵呵
    DECLARE
      x VARCHAR2(1);  
      y VARCHAR2(1);  
    BEGIN
      IF (x is null and y is not null) or (x is not null and y is null) or x<>y THEN
        dbms_output.put_line('not equal');
      ELSE
        dbms_output.put_line('equal');
      END IF;
    END;
    /
      

  6.   

    NULL和任何字符比骄都返回false;DECLARE
      x VARCHAR2(1); 
      y VARCHAR2(1); 
    BEGIN
      IF ((x is null and y is null)or x = y)THEN
      dbms_output.put_line('YES');
      ELSE
      dbms_output.put_line('NO');
      END IF;
    END;
      

  7.   

    不等于的情况,用这个
    DECLARE
      x VARCHAR2(1); 
      y VARCHAR2(1); 
    BEGIN
      IF (x||'1' <> y||'1')THEN  --NULL做隐式转化
      dbms_output.put_line('NO');
      ELSE
      dbms_output.put_line('YES');
      END IF;
    END;
      

  8.   

    谢谢大家热心回帖哈。
    找到了一个function能够实现等于和不等于的判断,跟大家共有下。FUNCTION ISEQUAL 
    (
    VAR1 IN  VARCHAR2,
    VAR2 IN  VARCHAR2
    )
    RETURN NUMBER IS
    BEGIN
        IF (VAR1 IS NULL AND VAR2 IS NULL OR VAR1 IS NOT NULL AND VAR2 IS NOT NULL AND VAR1 = VAR2) THEN
           RETURN 1;
        ELSE
           RETURN 0;
        END IF;
    END ISEQUAL;