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 で位取りに合わせる。あふれた行を特定するにはテスト中にクエリを絞り込み、入力検証を追加する。
同じデータベースの他の項目
- gc buffer busy待機 (RAC): インスタンス間で転送中のキャッシュフュージョンブロックをめぐる競合
- library cache lock待機: ライブラリキャッシュのオブジェクトハンドルをめぐる競合 (解析/DDL のシリアライズ)
- ORA-00604error occurred at recursive SQL level(再帰 SQL レベルでエラーが発生)
- ORA-01400cannot insert NULL into (column)(列に NULL は挿入できない)
- ORA-02291integrity constraint violated - parent key not found(整合性制約違反 - 親キーがない)
- ORA-02292integrity constraint violated - child record found(整合性制約違反 - 子レコードがある)
- ORA-00979not a GROUP BY expression(GROUP BY の式ではない)