变量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,'某个字符')来替代。
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,'某个字符')来替代。
解决方案 »
- 求教:这个存储过程在pl/sql developer 怎么执行 谢谢大家
- 求一个精确匹配的sql
- 求一个查询语句
- 急急!!如何定时自动实现数据备份
- 怎样插入大于4000的字符串?第---4-----次发----这么多分都没人会?
- 那位教我怎样返回这样一个数据集
- 我想在ORACLE数据库中查询日期小于等于某一日期的记录,但查询不到日期边界值的记录,请帮忙!
- 关于Oracle9i时间字段的问题。。总差8小时。。。
- 简单的问题,如何能用一条命令删除一个自建的用户,如user1下的所有表呢?
- 客户端提交上来几千个字符串进行查询,怎么处理好一点?
- 求助!!Oracle里如何判断NULL?
- 多个job一起执行后 其中一个无法得到正确结果
--需加个空格,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;
/
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;
所以只能写NVL(x,''),而不能写成NVL(x,'某个字符')来替代。你的方法不行的To:fw0124
貌似可以,我再看看有没有潜在bug哈
你这个判断,如果是等号的时候没问题要是不等号的时候,应该写成什么样子?
--不等的情况,还真没太在意过,呵呵
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;
/
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;
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;
找到了一个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;