insert插入数据时 SQL 错误: ORA-01722: 无效数字

insert插入数据时 SQL 错误: ORA-01722: 无效数字,第1张

check(UserTypeID like 'U'+'T'+'[0-9][0-9]') 这种写法你从哪里看来的?

这个约束删除掉了就正常了,你可以试下别的写法。

楼上说的SQL SERVER是另外一种数据库,跟ORACLE没关系。

帮你换了一个,但是不知道你的需求,你看着改。

check(regexp_like(UserTypeID ,'^([UT]+[0-9][0-9])$'))

在做报表系统的过程中,遇到了一个很有意思的问题,就是Oracle报了一个错 java.sql.SQLException: ORA-01722: 无效数字 ,正常来说,报该错就意味着数据类型不匹配,但是因为同一sql语句,多加了一个条件,就查出结果,不加条件,反而报错所以就意味着,可能数据有误(或者语句有误),但是哪一条数据有误,肉眼难以识别!

有一个机构表,存10个机构, is_use=‘0’ 意味着无效,不统计, is_use=‘1’ 意味着有效,参与统计,先看sql:

这个是公共的sql部分,往后添加条件,即可查相应结果:

查昆明能查出结果,但是查云南的时候,就报错,所以一怒之下,把ynCheckSql语句结果查出来,一条一条检验,还真发现了问题:

针对德宏这一个地方,查询的时候报了 ORA-01722: 无效数字 错误,仔细查看数据源,发现数据也没什么问题,因为计算过程中,会报除数不能为0的错,而该条数据有一个值( 该值是分母,也就是除数 ),我们都知道,除数不能为0,所以Oracle针对除数为0的情况,有一个函数:

所以为了直接返回结果,除数为0时直接返回 - 如这个sql语句: ROUND(DECODE(ba.personal_plan,0,'-',(r.p5_year_inc+r.p6_year_inc+r.p7_year_inc+r.p8_year_inc+r.p9_year_inc+r.p10_year_inc)/ba.personal_plan*100),3) perPlan

我们都知道ROUND函数是保留小数位数,如果返回 - ,ROUND函数肯定会包无效数字错误,所以如果除数为0,直接返回特殊字符9999即可,后面再对9999进行单独处理!!

楼主的问题 其实很明显 你的第一条语句是表HADS 和where后面的的表HA 做了关联

我仔细看了一下你的条件 最终外面的查询where结果是where null>8 and 0>0 那么这个条件肯定会报错的,不是条件合在一起报错 。

第二条语句 没有指定HAMDSN is null ,所以没有问题

第三条语句 虽然指定了HAMDSN is null , 但面的表和外面的表没有关系,所以也没有问题

注:sql语句如果没有特指的话 后面的where会自动过滤掉了null(因为默认情况下 null不参与运算的 这个楼主应该知道) 所以就不会报错

不明白可以再问我


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9257921.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存