数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
ORACLE中BFILE字段的使用研究

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

因为做项目,需要使用BFILE字段存储图像文件,所以进行了一些研究。

bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.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的参数1DIRECTORY名,参数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;




相关文章

相关软件