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