暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle NVL-无效编号

askTom 2017-08-29
769

问题描述

嗨,汤姆,

你能解释为什么当expr1不为null时,NVL必须处理expr2吗?
我看到在WHERE条件下使用时没有发生错误。

错误:-
更新mytable
设置number_col = nvl(1234,'dummy')
其中number_col为null
或者
从dual中选择nvl(1,'X');

成功:-
从对偶中选择 * 其中1 = nvl(1,'X');

谢谢,
维奈

专家解答

事情就是这样,例如

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论