DBAtlas · データベース運用アトラス

ORA-01438: value larger than specified precision allowed for this column(列の精度を超える値)

Oracle

意味

定義された精度と位取りの上限を超える数値が NUMBER 列に書き込まれた。例えば整数部が 3 桁の値は NUMBER(4,2) 列に収まらない。

原因

列の NUMBER(p,s) 定義がデータに対して狭すぎる、計算結果が想定より大きい、小数の位取りにより整数部に使える桁が減る (NUMBER(5,3) では整数部は 2 桁のみ)。

対処方法

実際のデータ範囲に合わせて列の容量を広げる: ALTER TABLE my_table MODIFY (my_column NUMBER(12,2)); アプリケーションで値を丸めるか、ROUND/TRUNC で位取りに合わせる。あふれた行を特定するにはテスト中にクエリを絞り込み、入力検証を追加する。

DBAtlas で開く →

同じデータベースの他の項目