ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
BLOBデータを読み出してファイルに出力する
スポンサード リンク

DBに登録されたバイナリデータを読み込む場合、DBMS_LOBパッケージを使用する。

例1) 表「blob01」の列「filedata」に格納されているBLOBデータをファイル「c:\temp\'sample02.gif'」に出力する。

(1)事前準備。バイナリファイルの格納ディレクトリ「c:\temp」のディレクトリオブジェクト「LOB_DIR」を作成する
-- ディレクトリオブジェクトの作成
create directory LOB_DIR as 'c:\temp';
-- ディレクトリオブジェクトに読み込み権限をユーザ「test」に付与する。
grant read on directory LOB_DIR to test;
 
(2)表「blob01」にファイル「c:\temp\'sample02.gif'」を格納する。

declare

  v_blob_data blob;
  v_blob_buffer long raw;
  v_file_size integer;
  v_file_handle utl_file.file_type;
  v_start_point integer := 1;
  v_write_size integer := 2000;

begin

   -- BLOBデータ列「filedata」のロケータを「v_blob_data」に代入する
  select filedata into v_blob_data from blob01 where code = '001';

   -- 出力ファイル「sample02.gif」を"wb"モードでオープンする
  v_file_handle := utl_file.fopen('LOB_DIR', 'sample02.gif', 'wb');

   -- BLOBデータのサイズを取得する
  v_file_size := dbms_lob.getlength(v_blob_data);

   while v_start_point < v_file_size loop

     -- 最後の書込みの場合、書込みサイズを残りサイズに合わせる
    if v_start_point + v_write_size > v_file_size then
      v_write_size := v_file_size - v_start_point +1;
    end if;

     -- BLOBデータを先頭からBLOBデータサイズ読み込み、「v_blob_buffer」に代入
    dbms_lob.read(v_blob_data, v_write_size, v_start_point, v_blob_buffer);

     -- 「v_blob_buffer」に代入されたBLOBデータをファイル出力する
    utl_file.put_raw(v_file_handle, v_blob_buffer, true);

     -- 書込み開始位置を進める
    v_start_point := v_start_point + v_write_size;

  end loop;

-- 出力ファイル「sample02.gif」をクローズする。
utl_file.fclose(v_file_handle);

end;


スポンサード リンク


BLOBデータの登録
BLOBデータの読み出してファイルに出力する
バイナリデータを圧縮する(COMPRESS.LZ_COMPRESS )
バイナリデータを解凍する(COMPRESS.LZ_UNCOMPRESS )
CLOBデータの登録
CLOBデータを読み出してファイルに出力する
ファイルサイズを取得する(DBMS_LOB.GETLENGTH)

PL/SQL へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ