|
分類:[データベース全般]
環境 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
よろしくお願いします。
|