快速定位语句:
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为";"
,再执行即可得知是问题数据
原文:https://www.cnblogs.com/yykj/p/14205903.html