Home > DB / SQL Archive

DB / SQL Archive

Oracleのキャラセット確認

Oracleのキャラクタセットの確認方法をメモ。

下記のSQLを実行。

SELECT VALUE
FROM NLS_DATABASE_PARAMETERS
WHERE PARAMETER=’NLS_CHARACTERSET’;

実行例。

VALUE
——
UTF8

(2007/05/27修正:「文字コード」ではない)

SELECT文を1画面ごとに一時停止させる

参考サイト

■”SET PAUSE ON”
ユーザがEnterを押すまで画面表示が止まる

■”SET PAUSE OFF”
一気に結果を表示(SQL*PLUSのデフォルト)

■”SET PAUSE (表示したいメッセージ)”
一時停止と同時にメッセージを表示
例)”SET PAUSE Enterを押して下さい”

[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型カラム」から値を取得する場合は気を付けましょう。

Home > DB / SQL Archive

Search
Feeds
Meta

Return to page top