OracleDBを普段から使われている方にとっては初歩中の初歩かもしれませんので、お恥ずかしい限りですが、
数年OracleDBに関わる仕事をしてきて、今更ながら表題の事を知ったので、備忘録として書いておきます。
(記事投稿を始めてから、技術的な内容を書くのは初めてかもしれませんw)
OracleDBのnumber型の登録可能な桁数は、データ長(DATA_LENGTH)の数と同じ桁数だと思っていたのですが、
実はそうではないらしく・・・登録しようとしたらデータ長に収まっているのに
「ORA-01438: この列に許容される指定精度より大きな値です」のエラーが出てしまいました。
どうやら、列に登録可能な桁数は、DATA_LENGTHではなく、
DATA_PRECISION(NUMBERデータ型の場合は10進精度)が
登録可能桁数だったようです。
(ちなみに整数以下の小数点は、DATA_SCALEの値が登録可能な桁数のようです)
僕の場合は、データ長(DATA_LENGTH)が20くらいで、精度(DATA_PRECISION)は5でしたので、
6桁以上を登録しようとするとエラーになる、といった感じでした。
定義情報は以下のようなSQLで取得できます。
SELECT COLUMN_NAME, DATA_LENGTH, DATA_PRECISION
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = ‘テーブル名’;