ORA-01438: 值大于为此列指定的允许精度 问题查找


快速定位语句:

1 SELECT 'SELECT '''||COLUMN_NAME||''' AS COL_CODE, COUNT(*) AS COL_CNT FROM '||TABLE_NAME||' WHERE '|| 
2        CASE WHEN DATA_SCALE = 0 THEN 'LENGTHB(TO_CHAR('||COLUMN_NAME||')) > '||DATA_PRECISION
3              ELSE '(INSTR(TO_CHAR('||COLUMN_NAME||'),''.'') > 0 AND LENGTHB(SUBSTR(TO_CHAR('||COLUMN_NAME||'),INSTR(TO_CHAR('||COLUMN_NAME||'),''.'')+1,LENGTH(TO_CHAR('||COLUMN_NAME||')))) > '||DATA_SCALE||') OR LENGTHB(SUBSTR(TO_CHAR('||COLUMN_NAME||'),1,INSTR(TO_CHAR('||COLUMN_NAME||'),''.'')-1)) > '||(NVL(DATA_PRECISION,38)-DATA_SCALE) END ||'  UNION ALL ' AS TSQL 
4          FROM ALL_TAB_COLUMNS T WHERE T.TABLE_NAME = '表名' AND T.OWNER = '用户名' AND DATA_TYPE = 'NUMBER';

 

查询时删除最后一个UNION ALL; 通过结果可以得知是那个字段精度有问题,再把定位语句对应字段的语句单独列出来,替换SELECT中的内容为表主键及问题列,剔除UNION ALL为";"

,再执行即可得知是问题数据 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM