この関数が結果として空の blob 値を返す理由を教えてください。ループ後に BFILE 型の変数を閉じません。どこに問題があるのか想像できません。
FUNCTION f$bfile_to_blob
(I_FID_ID IN INTEGER)
RETURN BLOB IS
bf BFILE;
Amount INTEGER := 32767;
Position integer := 1;
buffer RAW(32767);
bl LONG RAW := '';
bb BLOB;
BEGIN
select fid_bckp into bf
from filedoc
where fid_id = I_FID_ID;
dbms_lob.open(bf, dbms_lob.lob_readonly);
DBMS_LOB.CREATETEMPORARY(bb, TRUE, DBMS_LOB.SESSION);
LOOP
dbms_lob.read(bf, Amount, Position, buffer);
dbms_lob.writeappend(bb,amount,buffer);
Position := Position + Amount;
END LOOP;
dbms_lob.close(bf);
return bb;
END;
このように関数を呼び出します
select F$BFILE_TO_BLOB(fid_id) from filedoc where fid_id = 2150;