SQL中,使用NVL函数,报错:ora-01722:无效数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中,使用NVL函数,报错:ora-01722:无效数字相关的知识,希望对你有一定的参考价值。

update abmi_item_storage_all t set t.amount = nvl((select to_number(nvL(a.function_text,0)) from abmi_item_all a where a.function_text is not null and a.item_id = t.item_id and a.item_code = t.item_code and a.item_type = 7 and a.org_id = t.org_id),0) where (select item_type from abmi_item_all where item_id = t.item_id) = 7 and t.item_code not like 'M-%' and t.org_id = 602 and t.period_code = 'GHCD-JAN-11';在执行这条SQL语句时,弹出ORA-01722:数字无效错误,因条件org_id和period_code的影响,有时报错,有时通过,完美一点的SQL,使用NVL 语句。谢谢!!!

nvl 是用来 当数据库字段为空时,强制指定栏位的值。 如nvl(abc,0) 表示abc为空的时候,返回值为0 ,可以先用select 的方式把影响的行查出来,看是否where 语句错误,如果没有错,再检查update 部分的语句是否不正确,很简单就能排查问题的 。 参考技术A 因为NVL函数, 遇到数字型会报这个错.
ORA-01722: invalid number 即: 无法验证数字
参考技术B 这个错误, 可能是你的表的数据问题.

也就是 abmi_item_all 表的 function_text 列当中, 存在有 非空, 又非数据的数据.

Oracle中nvl函数的用法和作用是啥?

参考技术A

用法:查询不相等数据

功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值

用法:如果是空值就替换成另一个值如nvl(字段,‘x’)字段值等于null就这个函数得到的结果就是'x',一般用于存在空值比较的情况下,比如字段a与字段b都是int型,其中一个等于null另一个为非空值,你使用a<>b是不成立的。

使用此条件查询你将丢失这条本来不相等的数据,可以如此用法nvl(字段,-1)<>nvl(字段,-1),这样就可以得到想要查询的数据,当然查询数据的前提是此字段值不能有-1值才能用这种写法

功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,例:nvl(yanlei777,0) > 0NVL(yanlei777, 0) 的意思是 如果 yanlei777 是NULL, 则取0值通过查询获得某个字段的合计值,如果这个值为null将给出一个预设的默认值。

以上是关于SQL中,使用NVL函数,报错:ora-01722:无效数字的主要内容,如果未能解决你的问题,请参考以下文章

什么是“oracle ORA-01722”无效数字?

遇到的一个ORA-01722,无效数字的问题

oracle SQL Developer 显示数字数据类型为空,而 Length 函数显示 ORA-01722:无效数字

Oracle sql 错误 ora-01722 无效数字 ora-02063 前行来自

java.sql.SQLSyntaxErrorException-ORA-01722:无效数字 - 准备好的语句

ORACLE-023:令人烦恼的 ora-01722 无效数字