作業系統檔案轉儲成BLOB

abstractcyj發表於2015-11-27
CREATE OR REPLACE FUNCTION f_load_file(p_directory IN VARCHAR2,
                            p_filename  IN VARCHAR2) RETURN BLOB IS
  src_file BFILE;
  dst_file BLOB;
  lgh_file BINARY_INTEGER;
BEGIN
   dbms_lob.createtemporary(dst_file, TRUE);
  
  src_file := bfilename(p_directory, p_filename); 
  
   dbms_lob.fileopen(src_file, dbms_lob.file_readonly);


  -- determine length
  lgh_file := dbms_lob.getlength(src_file);


  -- read the file
  dbms_lob.loadfromfile(dst_file, src_file, lgh_file);
 dbms_lob.close(lob_loc => src_file);
  RETURN dst_file;
END;


其中p_directory 是目錄物件名稱, p_filename是檔名

呼叫方式:
select f_load_file('IMGUPLOAD_DIR', '養生堂維C咀嚼片批准證書.JPG') from dual

如果遇到錯誤,ora-22290: operation would exceed the maximum number of opened files or lobs
採用如下方式解決: dbms_lob.filecloseall;

除錯的時候,需要通過dbms_lob.createtemporary(dst_file, TRUE)將BLOB物件初始化, 否則會丟擲錯誤:
ora-22275: invalid LOB locator specified


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-1847885/,如需轉載,請註明出處,否則將追究法律責任。

相關文章