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

oracle报错ORA-01722: invalid number

原创 游兵老卒 2024-01-09
889

一、问题

研发人员提出生产环境一个查询报错了,提示信息如下:
oracle报错ORA-01722: invalid number

同时也强调生产环境这个语句以前是好用的,且目前仿真环境也是可用的。

二、分析

我要了了语句,去掉不重要的部分,留下报错的子查询语句。
简化为
select* from A a inner join B b on a.id=b.name
A表的id列类型是Number B表的name列类型是字符型,但是里面存的是数字。

分析里面B表里面有不能隐形转为数字的字符,造成比较时报错。

通过语句对生产环境B表的name进行查看非数字内容。

select 字段 from 表 where regexp_replace(字段,'^[-\+]?\d+(\.\d+)?$','') is not null;

得到的结果是,有几行name是字符’null’,不时默认空值的NULL,分析是人为录入的字符。

三、解决

临时解决的方式是
select* from A a inner join B b on to_char(a.id)=b.name

最终解决方式是规范开发规范。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论