PL/SQL CLOB型の文字列をバイト数を指定して取得する
PL/SQL
でCLOB
型の文字列をバイト数を指定して取得する方法を紹介します。
VARCHAR2
などの文字列をバイト数を指定して取得する場合はOracle 文字列を指定した範囲の長さに切り取るで紹介したようにSUBSTRB
を使用しますが、CLOB
の場合はエラーになってしまいます。
VARCHAR2
の型に登録するために4000
バイト 1にカットするケースが多いかと思いますが、そのようなときは以下のようにします。
tmp_str VARCHAR2(32767);
tmp_str := DBMS_LOB.SUBSTR(tmp_clob, 4000, 1);
WHILE LENGTHB(tmp_str) > 4000 LOOP
tmp_str := SUBSTR(tmp_str, 1, LENGTH(tmp_str) - 1);
END LOOP;
DBMS_LOB.SUBSTR(tmp_clob, 4000, 1)
で、CLOB
の文字列を4000
文字まで取得します。
バイト数ではなく、文字数で取得するため、4000
バイトを超えてしまいます。
そのため、32767
バイトのVARCHAR2
の変数を定義して、その変数にセットします。
VARCHAR2
は最大4000
バイト 1までしか登録できませんが、PL/SQL
の変数で扱えるバイト数は32767
バイトです。
詳しくは以下のサイトが参考になります。
参考ページ(外部サイト): https://www.shift-the-oracle.com/plsql/data-type.html
その後、4000
バイト以下になるまでループして、末尾を1文字づつ削除していきます。
Oracle
のバージョンが12c
以降の場合は4000
バイト以上登録できるように設定する方法もあります。 ↩