快速定位語句:
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為";"
,再執行即可得知是問題數據
