码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-09-27 17:01:28      阅读:1264      评论:0      收藏:0      [点我收藏+]

标签:没有   oracle   ring   char   img   idt   原因   com   alt   

技术分享图片技术分享图片

错误现象如上图,

当dataowner=990的时候,SQL执行正常,当dataowner=991的时候,SQL执行报错,ORA-01722,无效数字

首先,我认为代码是不应该出现偶然性、随机性这种概念,但是我没有考虑到原始数据这个因素

问题出在timestr这个字段上,这是一个char类型的字段

我在编码SQL的时候,使用了char=1这样的谓词

我凭借自己的经验得到如下结论:

Oracle是在比较数据时,存在隐式转换的机制

"When comparing a character value with a NUMBER value, Oracle converts the character data to NUMBER."

查看执行计划之后,执行器隐式地对timestr这个字段做了to_number的操作

报错的原因其实很简单

当对dataowner=991的数据distinct该字段的时候,我们得到了‘’这样的数据

并不是null也不是‘’,是一个空格

执行以下SQL

select to_number(‘ ‘) from dual;

返回的就是ORA-07222,无效数字报错。

反而对null值执行to_number()函数,没有报错

 

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

标签:没有   oracle   ring   char   img   idt   原因   com   alt   

原文地址:https://www.cnblogs.com/MoreDrinkHotWater/p/9713676.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!