首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

ORA-01438 錯誤解析:NUMBER(p,s) 精度與小數位的陷阱

     編輯:Oracle 資料庫相關知識

錯誤訊息:ORA-01438: value larger than specified precision allowed for this column

原因分析

欄位定義為 NUMBER(4,2),意為 總位數 4 位,小數 2 位,整數部分僅剩 2 位(範圍 -99.99 ~ 99.99)。嘗試插入 200.12(整數部 3 位)即超出精度導致報錯。

NUMBER(p, s) 參數詳解

  • p (precision):總有效數字位數,最大 38。
  • s (scale):小數點右側位數。可為負數,表示向左捨入(十位、百位...)。

負數 Scale 範例

  • NUMBER(4, -3):儲存 1234 → 實際存 1000(千位捨入)。
  • NUMBER(4, -2):儲存 1234 → 實際存 1200(百位捨入)。

常見型別對應建議

Oracle 定義語意對應 Java/應用型別
NUMBER(10,6)含 6 位小數Double / BigDecimal
NUMBER(4)整數,等同 NUMBER(4,0)Integer / Long

設計原則

  1. 預估最大整數位數 + 所需小數位 = p。
  2. 預留緩衝位數,避免上線後因業務增長需 ALTER TABLE MODIFY(需鎖表)。
  3. 金融/金額欄位建議用 NUMBER(19,4) 或更高精度,並搭配 CHECK 約束。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved