标题: 教你快速掌握Oracle数据库中的bfile
lonjew
元帅
Rank: 1



UID 73191
精华 1
积分 30615
帖子 14941
威望 3
金币 14931
热心 12
阅读权限 100
注册 2008-1-28
状态 离线
教你快速掌握Oracle数据库中的bfile

教你快速掌握Oracle数据库中的bfile
  具体步骤如下:  
  1.先在oracle数据库中下面我们建立一个目录别名,用于将文件定位指针映射到文件系统:  




create DIRECTORY 'tmpdir' AS '/tmp';  
  tmpdir表示逻辑目录名,'/tmp'是实际目录。 注意该目录oracle应该有读权限 然后根据需要授权。  




GRANT READ ON DIRECTORY bfile_dir1 TO scott;

建立一个含有bfile字段的表

create table bfiletest(id number(3), fname bfile);

建立一个含有BLOB字段的表


create table blobtest(id number(3),ablob blob);  
  2.插入数据  
  这里需要使用bfilename来进行bfile字段的insert 或者 update操作  




INSERT INTO bfiletest

VALUES (1, BFILENAME ('tmpdir', 'tmptest'));  
  bfilename的参数1是DIRECTORY名,参数2是文件名。注意:这一行中插入的是  
  一个指向/tmp/tmptest的文件定位指针映射,不是文件本身。  
  3.读取bfile  
  通过使用dbms_lob包进行可以对bfile读入到blob/clob对象中操作(只读)  




CREATE OR REPLACE PROCEDURE loadLOBFromBFILE_proc(

TID IN NUMBER,rfilename in varchar2,rfiledir
in varchar2,upmessage out varchar2)
AS
  Dest_loc      BLOB;
  Src_loc        BFILE;
BEGIN
  INSERT INTO BLOBTEST(ID,ABLOB)
VALUES(TID,EMPTY_BLOB()) RETURN ABLOB INTO DEST_LOC;

  Src_loc := BFILENAME(rfiledir,rfilename);
      

  /* 如果bfile文件实际存在 */
  IF (DBMS_LOB.FILEEXISTS(Src_loc) != 0)
  THEN
      /* 打开bfile源文件 */  
      DBMS_LOB.OPEN(Src_loc, DBMS_LOB.LOB_READONLY);
      /* 打开目标blob: */  
      DBMS_LOB.OPEN(Dest_loc, DBMS_LOB.LOB_READWRITE);
      /*从文件中装入 */
      DBMS_LOB.LOADFROMFILE(Dest_loc,
Src_loc,DBMS_LOB.GETLENGTH(Src_loc));
      /* 记得关闭: */  
      DBMS_LOB.CLOSE(Dest_loc);
      DBMS_LOB.CLOSE(Src_loc);
      COMMIT;
      upmessage := '0';
  END IF;
  EXCEPTION
      WHEN OTHERS THEN
          ROLLBACK;
          upmessage := '操作失败';

END;  
  (注释:bfile字段实际的文件
存储
在文件系统中,字段中
存储
的是文件定位指针。bfile对oracle来说是只读的,也不参与事务性控制和数据恢复)。

网友 lonjew 签名 - 网友社区 ==
顶部
[广告] 免费域名(Free Subdomain) 免费空间(Free hosting) PR查询(Google Pagerank)



当前时区 GMT+8, 现在时间是 2008-10-14 00:51
信产部ICP备案:京ICP备05066424号 北京市公安局网监备案:1101050648号

Powered by Discuz! 5.5.0
清除 Cookies - 联系我们 - 网友俱乐部 - Archiver - WAP