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

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

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

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

第一种方法需要使用sql语句拼写的方式来逐个排错.
所以如果是用的Hibernate或者EF的小伙伴要用第二种方法了.
废话不多说,直接上代码图.
oracle 如何快速定位到 ORACLE“ORA-01722:无效数字”的错误字段的两种方法_第1张图片

特点就是逐个字段进行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的内容, 尝试进行插入和更新,然后发现有问题的字段…

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

你可能感兴趣的:(软件质量)