argius note

プログラミング関連

Oracle 関数 CHR,DUMP で制御文字を扱う

今まで使ったことの無かった、つまり用の無かった関数です。
Oracle 10g以降は正規表現が標準で使えるようになったので、また別のアプローチもあるかと思いますが、今回は9iでの話。
SQL*PLUSや通常のビューアでは、改行文字やタブ文字を見分けることができません。


DUMP関数を使うと、バイナリ値が参照できます。

SQL> SELECT DUMP(CONTENT) FROM TEST;
DUMP(CONTENT)
--------------------------------
Typ=1 Len=2: 13,10
SQL>

デフォルトでは10進数で表示されるので、16進数で表示したい場合はDUMP(CONTENT,16)とします。データが大きい場合は...どうなるかは試してません。


CHR関数を使うと、文字コードに対応する文字を取得できます。
文字列中のCR(キャリッジリターン)を全て取り除きたい場合は、

SQL> UPDATE TEST SET CONTENT=REPLACE(CONTENT,CHR(13),'');
SQL>

とすれば良いです。


余談ですが、実際に遭遇したのは、VARCHAR2のフィールドにCHR(0)が含まれていたという問題でした。
何処かから貰ってきたのかと思ったら、自分のところのバッチでわざわざ入れていたということが判明。おそらくNULLを設定したかったんでしょうけどね。
もう、誰よ、こんなことしたの...