Oracle报错ORA-01722: 无效数字排查解决方案

Oracle报错ORA-01722: 无效数字排查解决方案,第1张

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

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

查昆明能查出结果,但是查云南的时候,就报错,所以一怒之下,把ynCheckSql语句结果查出来,一条一条检验,还真发现了问题:
针对德宏这一个地方,查询的时候报了 ORA-01722: 无效数字 错误,仔细查看数据源,发现数据也没什么问题,因为计算过程中,会报除数不能为0的错,而该条数据有一个值( 该值是分母,也就是除数 ),我们都知道,除数不能为0,所以Oracle针对除数为0的情况,有一个函数:

所以为了直接返回结果,除数为0时直接返回 - 如这个sql语句: ROUND(DECODE(bapersonal_plan,0,'-',(rp5_year_inc+rp6_year_inc+rp7_year_inc+rp8_year_inc+rp9_year_inc+rp10_year_inc)/bapersonal_plan100),3) perPlan
我们都知道ROUND函数是保留小数位数,如果返回 - ,ROUND函数肯定会包无效数字错误,所以如果除数为0,直接返回特殊字符9999即可,后面再对9999进行单独处理!!

不用增加临时表空间,总是100%。
只有重启动数据库,才能释放。
B]临时表空间为什么总是100%, 不自动释放?
我在建实体化视图的时候个别create mv语句
总是报ORA-01652: unable to extend temp segment by 1024
我的临时表空间给了10G了,已经很大了。
而且现在是100%被占用了。
临时表空间怎么样才能清空,重建?
除了增加临时表空间,有没有其他解决办法来克服这个问题?
你的系统缺的不是临时表空间
查询一下你的mv指定的目标表空间


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

原文地址: http://outofmemory.cn/yw/13381473.html

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

发表评论

登录后才能评论

评论列表(0条)

保存