Oracle資料庫中對BLOB資料的操作問題

rongshiyuan發表於2012-08-13
【TechTarget中國原創】問:請問在Oracle資料庫中,如何插入並檢索二進位制大物件資料(BLOB)?
  答:我建議在處理大物件資料之前,先閱讀一下“Oracle應用開發者指南”中的大物件部分。
  下面給出的連結就是線上版本,其中14章給出了一些插入和讀取BLOB的例子:
  14章
  下面我通過一個具體的例項,來演示如何將外部檔案匯入一個BLOB列中:
  第一步:建立一個目錄,指向BLOB的位置。將“blob_dir”替換成“/oradata/blobs”。
  第二步:為使用該目錄的使用者提供可讀授權。
  第三步:建立大物件表。
 

  -- the storage table for the image file
  CREATE TABLE my_blobs (
  dname VARCHAR2(30), -- directory name
  sname VARCHAR2(30), -- subdirectory name or description
  fname VARCHAR2(30), -- file name
  fblob BLOB); -- blob file
 
  第四步:建立一個儲存過程,用來插入BLOB物件。
 

  -- create the procedure to load the blob file
  CREATE OR REPLACE PROCEDURE load_blob (
  pdname VARCHAR2,
  psname VARCHAR2,
  pfname VARCHAR2) IS
  src_file BFILE;
  dst_file BLOB;
  lgh_file BINARY_INTEGER;
  BEGIN
  src_file := bfilename('BLOB_DIR', pfname);
  -- insert a NULL record to lock
  INSERT INTO my_blobs
  (dname, sname, fname, fblob)
  VALUES
  (pdname, psname, pfname, EMPTY_BLOB())
  RETURNING fblob INTO dst_file;
  -- lock record
  SELECT fblob
  INTO dst_file
  FROM my_blobs
  WHERE dname = pdname
  AND sname = psname
  AND fname = pfname
  FOR UPDATE;
  -- open the file
  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);
  -- update the blob field
  UPDATE my_blobs
  SET fblob = dst_file
  WHERE dname = pdname
  AND sname = psname
  AND fname = pfname;
  -- close file
  dbms_lob.fileclose(src_file);
  END load_file;
  /
 
  第五步:執行儲存過程。
 

  SQL> exec load_blob('BLOB_DIR','Head shot photo','km_pic.png');
  PL/SQL procedure successfully completed.
 
  你現在可以通過檢查大小,來驗證原始物件與資料庫物件的匹配。
  第六步:從OS上檢查BLOB大小。
 

  SQL> !ls -l /oradata/blobs/km_pic.png
  -rwxr-xr-x 1 oracle oinstall 21150 Jan 6 01:55 /oradata/blobs/km_pic.png
 
  第七步:從Oracle檢查BLOB大小。
 

  1 declare
  2 a blob;
  3 begin
  4 select fblob into a from my_blobs;
  5 dbms_output.put_line(dbms_lob.getlength(a));
  6* end;
  SQL> /
  21150
  PL/SQL procedure successfully completed.
TechTarget中國原創內容,原文連結:http://www.searchdatabase.com.cn/showcontent_57526.htm

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

相關文章