OracleのCLOB出力対応

 oracleでSQL*Plus実行時にCLOBデータを表示するには、以下の環境設定を行うと全行確認することができます。

  • SET LOBOFFSET {n|1} CLOB およびNCLOB データを取得し、表示する開始位置を設定します。
  • SET LONG {80|n} LONG、CLOB、NCLOB およびXMLType 値を表示するため、およびLONG 値をコピーするための最大幅を バイト単位で設定します。
  • SET LONGCHUNKSIZE {80|n} SQL*Plus がLONG、CLOB、NCLOB またはXMLType値を取得するときの増分値のサイズ(バイト単位)を設定します。

 LOBOFFSETが表示の開始位置、LONGが表示範囲、LONGCHUNKSIZEは恐らくLONG値が足りなかった場合にWRAP設定で表示する際の最大値だと思ってるんだけどどうかしら? 
 ひとまず設定が確実に必要だったのはLONG。もう二つの設定はCLOBに関連する内容なので、念のために設定したという話。

 プログラム言語だと、CLOB用にAPIが用意されているので、SQL*Plusにも何か特別なものが必要なのかと思ったらそうでもなかったので安心。

 csvエクスポートには上記3点を追加することで対応できる。改行対応は別途必要だけどもネ。

(2006/11/30追記)

引用:http://ta2blog.air-nifty.com/seclusion/2006/03/select_e9b7.html

カラム内に改行コードが存在すると、SQL*Plusなどで検索すると表示内容が崩れてしまいます。
それを回避するためには、REPLACE関数とCHR関数を使用して、制御文字関連を置き換えて対応します。

TBL_HOGE.DESCRIPTION内に存在する改行コード(LF):0x0Aをドット:”.”に置き換える場合

SELECT REPLACE(DESCRIPTION, CHR(10), ‘.’)) FROM TBL_HOGE

 上記を参考にし、改行コードを何らかの代替文字等に変換して対応します。

select ROWNUM,REPLACE(DESCRIPTION, CHR(13), ”) from TBL_HOGE;
select ROWNUM,REPLACE(DESCRIPTION, CHR(10), ”) from TBL_HOGE;
select ROWNUM,REPLACE(DESCRIPTION, CHR(13)CHR(10), ”) from TBL_HOGE;
select ROWNUM,REPLACE(DESCRIPTION, CHR(13) || CHR(10), ”) from TBL_HOGE;

 改行コードは、CRとLFの組み合わせがあるので、上記4通りのどれかが多分あたるかと思います。

コメント / トラックバック2件 to “OracleのCLOB出力対応”

  1. ゆこたんの発言

    検索エンジンから来ました。:)
    あぉ!その改行対応が知りたいよー!

  2. pavlishkaの発言

    こんにちは♪
    月曜日になるとわかるかも。
    ゆこたんさんは最終的には改行をなくしたいのかしら?
    私が最終的に行ったのは、CLOBをcsvに落とすための設定。
    なので、CLOBの改行を無くす方法をお伝えする形になるかも。

コメントは停止中です。


フォロー

Get every new post delivered to your Inbox.