变量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,'某个字符')来替代。
------解决方案--------------------
- SQL code
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;
------解决方案--------------------
- SQL code
--不等的情况,还真没太在意过,呵呵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;/
------解决方案--------------------
不等于的情况,用这个
- SQL code
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;