ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

ORACLE TO_MULTI_BYTEが化ける。

普通の場合はあまり出ないですが、特集にORACLEの言語設定がUNICODEになっていると、
TO_MULTI_BYTEで変換すると、"!"や",.;:^~&"などの文字が化ける場合があります。
普通のJIS-Sの言語で設定された場合は化けなくて、正常に変換されます。
その問題を解決するためPLSQLを作りました。

CREATE OR REPLACE FUNCTION TO_MULTI_BYTE2(WORD IN VARCHAR2)
RETURN VARCHAR2 IS

/* 変数の宣言 */
R_WORD VARCHAR2(2000);
TYPE KANA IS VARRAY(10) OF VARCHAR2(10);
HAN KANA := KANA('!', '&', '.', ',', '/', '|', '^', '~', ';', ':');
ZEN KANA := KANA('!', '&', '.', ',', '/', '|', '^', '〜', ';', ':');

BEGIN
R_WORD:=WORD;
FOR I IN HAN.FIRST..HAN.LAST LOOP
R_WORD := REPLACE(R_WORD,HAN(I),ZEN(I));
END LOOP;

R_WORD := TO_MULTI_BYTE(R_WORD);

<>
RETURN R_WORD;

EXCEPTION
WHEN OTHERS
THEN
RETURN WORD;
END;
/

簡単だけど先に化ける文字を変換してまたTO_MULTI_BYTE関数を適用するようにしました。
もし、他のいい方法があれば是非コメントお願いします。