[SQL*PLUS]NUMBER型の値を取得→桁落ち?

先日、SQL*PLUSを使って、DB(Oracle 9i)からNUMBER型の値を取得しようとしていました。
それもかなり大量のレコード。

データが多いせいで最初は判らなかったのですが、いくつかのレコードが桁落ち?している事が発覚。

例えば。
“HOGE_TABLE”という表に、“HOGE_NUMBER”というNUMBER型カラムがあって、以下の値が格納されているとします。

 ・123456789
 ・1234567890
 ・12345678909

これを取得します。

 【SQLコマンド】
 SQL> SELECT HOGE_NUBER FROM HOGE_TABLE;

 【SQL結果】
 HOGE_NUMBER
 —————
 123456789
 1234567890
 1234567890

3つ目のレコードが正常に取得できてません(汗
それも落ちてる桁が「9」なので、桁落ちにしても変です(多汗

原因は。。。
SQL*PLUSの「設定」の問題でした。
サイズ(桁)が設定されていないNUMBER型カラムの場合、SQL*PLUSのデフォルト設定では「最大10桁(バイト)まで」を取得して表示するようになっているとの事。

その設定は、「SHOW numwidth」で確認できます。
(確認したらやはり”numwidth 10″でした)

これを変更するには、以下のコマンドを入力します。
 SET numw [バイト数]

先ほどの例で言うと、「SET numw 12」と設定しておけば12バイトまで表示されるので解決できた訳です。

 【SQLコマンド】
 SQL> SET numw 12
 SQL> SELECT HOGE_NUBER FROM HOGE_TABLE;

 【SQL結果】
 HOGE_NUMBER
 —————
 123456789
 1234567890
 12345678909

更に言えば、このテーブルを作る時にきちんとNUMBER型の最大サイズを定義しておけば発生しない問題だったんですねw

「サイズ未定義のNUMBER型カラム」から値を取得する場合は気を付けましょう。

コメントをどうぞ