PL/SQL CLOB型の文字列を置換する
PL/SQL
でCLOB
型の文字列を置換する方法を紹介します。
REPLACE
で置換すると、環境やCLOB
型の文字列にによってなぜかエラーが発生することがあったため、独自実装をしました。
(エラーの原因はわかっていません。。)
tmp_pos NUMBER;
tmp_pos := INSTR(tmp_clob, '置換される文字列');
IF tmp_pos > 0 THEN
tmp_clob := SUBSTR(tmp_clob, 1, tmp_pos - 1) || '置換する文字列' || SUBSTR(tmp_clob, tmp_pos + LENGTH('置換される文字列'));
END IF;
解説
INSTR
で「置換される文字列」の位置を取得します。
取得した位置が0以上(「置換される文字列」が存在する)場合は、その位置でSUBSTR
を使って文字列を分割します。
分割した文字の間に「置換する文字列」を挿入すれば置換が完了です。
上記の例では「置換される文字列」が最初にマッチした部分しか置換しません。
複数存在する場合はループ処理などで「置換される文字列」がなくなるまで同じ処理を行う必要があります。