OracleのCLOBデータを文字列(VARCHAR2)で取得・表示する

Oracleで4000バイトを超える文字列を格納する場合、CLOB型を利用しますよね。

その項目のデータをWebアプリケーションやOracleBIで、文字列として表示させたい場合には、以下のSQLを利用すると便利です。

select dbms_lob.substr(CLOB型のカラム名,1000,1) AS column1 from テーブル名

dbms_lob.substr関数の引数の最初の1000は1000文字分という意味、後ろの1は1バイト目からという意味になります。
なので、CLOB型のカラムの最初から1000文字を取得するということになりますね。

ここで注意したいことは、上記でも書いたように、文字で1000文字だということです。
つまり、我々日本人などが良く使うUTF8だと、1文字で3~4バイト使いますので、1000文字で3000~4000バイト使うことになります。

dbms_lob.substr(CLOB型のカラム名,1000,1) AS column1 で、column1に実際の文字列データが入りますが、column1はVARCHA2型に暗黙で変換されるので、最大値は4000バイトということになるんですよね。。。

SQLを投げたときに下記のエラーが出てしまう場合は、バイト数がVARCHAR2に入る最大値を超えていないか確認してみましょう。

ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました。
ORA-06512 “PL/SQL: numeric or value error%s”