Oracle数据库中对BLOB数据的操作问题

【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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17252115/viewspace-740824/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值