问题描述
嗨,汤姆,
你能解释为什么当expr1不为null时,NVL必须处理expr2吗?
我看到在WHERE条件下使用时没有发生错误。
错误:-
更新mytable
设置number_col = nvl(1234,'dummy')
其中number_col为null
或者
从dual中选择nvl(1,'X');
成功:-
从对偶中选择 * 其中1 = nvl(1,'X');
谢谢,
维奈
你能解释为什么当expr1不为null时,NVL必须处理expr2吗?
我看到在WHERE条件下使用时没有发生错误。
错误:-
更新mytable
设置number_col = nvl(1234,'dummy')
其中number_col为null
或者
从dual中选择nvl(1,'X');
成功:-
从对偶中选择 * 其中1 = nvl(1,'X');
谢谢,
维奈
专家解答
事情就是这样,例如
你可以通过合并来解决这个问题,但是这里有两件事在起作用
1) 数据类型的一致性
2) 表达式的评估
如果你不保持数据类型的一致性,你仍然会遇到麻烦:
但是,如果您确实有一致的数据类型 (我想您应该这样做),那么事情就会解决
SQL> select nvl(1,'X') from dual;
select nvl(1,'X') from dual
*
ERROR at line 1:
ORA-01722: invalid number
你可以通过合并来解决这个问题,但是这里有两件事在起作用
1) 数据类型的一致性
2) 表达式的评估
如果你不保持数据类型的一致性,你仍然会遇到麻烦:
SQL> select coalesce(1,'X') from dual;
select coalesce(1,'X') from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR
但是,如果您确实有一致的数据类型 (我想您应该这样做),那么事情就会解决
SQL> select nvl(1, 1/0) from dual;
select nvl(1, 1/0) from dual
*
ERROR at line 1:
ORA-01476: divisor is equal to zero
SQL> select coalesce(1, 1/0) from dual;
COALESCE(1,1/0)
---------------
1
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




