C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 101 を表示中)
■59850 / )  Oracle11gR2環境でのDECODE関数について
□投稿者/ M.U (1回)-(2011/06/09(Thu) 10:51:05)

分類:[データベース全般] 

環境
 Oracle11g Database Release 2 (11.2.0.1.0) for Microsoft Windows x64
データベースキャラクタセット:JA16SJISTILDE
 各国語キャラクタセット:AL16UTF16


上記環境でDECODE関数を使用するとエラーになることがあります。

エラーになる記述例
SELECT DECODE(Column1,NULL,NULL,Column2) FROM TABLE_1

ここでColumn2が返される場合に、以下のエラーが発生します。
エラー内容「SP2-0784: 0x97で始まる無効または不完全な文字が戻されました」
エラーが発生しない場合もありますが、文字化けした状態になります。

「SELECT DUMP(DECODE(Column1,NULL,NULL,Column2),1016)」を実行すると、
CharacterSetが「US7ASCII」になっています。

Oracle11gR1にて同様の記述をしても、エラーも文字化けも発生しなかったのですが、
R2になって仕様が変わったのでしょうか?
ちなみにR1環境でDUMPを実行すると、CharacterSetは「JA16SJISTILDE」になります。

原因のわかる方がいらっしゃれば教えてください。

ちなみに以下のいずれかの記述に修正しようと考えていますが、
修正方法に問題がある、もしくはこの修正方法がよいなどありましたら併せて教えてください。
 1.NVL2関数を使用する
    SELECT NVL2(Column1,Column2,NULL) FROM TABLE_1
 2.TO_CHAR関数を使用する
    SELECT DECODE(Column1,NULL,TO_CHAR(NULL),Column2) FROM TABLE_1
 3.CASE式を使用する
    SELECT CASE WHEN Column1 IS NULL THEN NULL ELSE Column2 END FROM TABLE_1

よろしくお願いします。
返信 編集キー/


管理者用

- Child Tree -