oracle 如何快速定位到 ORACLE“ORA-01722:无效数字”的错误字段的两种方法

本文仅讨论针对 插入数据的时候无法插入的情况. 并且仅适用来排除错误, 生产运行的代码可不能这么写哦.

对于查询select的时候报的这个错误,目前没啥研究.

由于字段太多又无法快速定位到是哪个字段出错了. 要人工查出来的话实在是一个非常要命的事情.

第一种方法需要使用sql语句拼写的方式来逐个排错.
所以如果是用的Hibernate或者EF的小伙伴要用第二种方法了.
废话不多说,直接上代码图.
在这里插入图片描述

特点就是逐个字段进行update, 等程序运行到错误的数据的时候,就能知道是哪个字段出问题了…

当然有的小伙伴会觉得写SQL语句,很麻烦.其实只要有强大的工具, 能很快把Insert语句变成update这种形式的语句.
步骤如下.
第一步,把insert sql语句黏贴到 navicat 中, 整理成可以运行的sql语句. 然点击SQL美化. 这样SQL语句就变成两个竖排了.
第二步,分别把insert(字段部分)values(数值部分), 字段和数值部分,复制到Excle中,两列并排放,
第三步,中间插入一排空列,全部填=号, 后面一列填 “,” 逗号 然后复制过来.到Sublime Text中.稍微处理下就可以变换成我这种写法了. 前后大概2分钟. 如果是猜的话,大概要10分钟以上.

如果是牛人,建议自己写个小工具. 专门用来转换和诊断这种问题.
另外也可以把工具直接嵌入到系统中, try catch的时候直接转储问题数据,到时候好诊断…不过要try catch的就太多了.

第二种方法 适合EF和Hibernate 这种没有sql语句的框架. 原理也很简单. 利用反射逐个把字段值换成 0, 然后尝试插入, 直到能够插入成功的时候, 把字段名字显示出来.
如果是有两个字段导致这种问题的,此方法就不好使了.幸好一般都是一个字段不对导致的.

第三种最好的方法是,写个排错小工具,每次出错了,都通过反射导出数据成xml, 然后这个排错小工具根据xml的内容, 尝试进行插入和更新,然后发现有问题的字段…

      这个工具想要的可以下面留言.   要的人多了, 我尝试着做一个...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值