Oracle中BFILE类型学习

1、BFILE类型介绍

  • BFILE类型是Oracle数据库中LOB类型的一种
  • BFILE字段存放指向操作系统文件的指针
  • BFILE字段只支持只读访问
  • BFILE字段支持最大2^64-1 bytes文件
  • BFILE字段指向的文件不是数据库的一部份,只能在数据库外维护
  • 对BFILE字段操作要使用BFILENAME函数
  • 读取BFILE字段需要使用DBMS_LOB包

2、BFILENAME函数介绍

  • BFILENAME函数语法如下

Description of bfilename.eps follows

  • BFILENAME函数有两个参数 'directory','filename
  • 'directory'参数是大小写敏感的
  • 'directory'参数所指定的目录必须在dba_directories中存在

3、创建包含BFILE字段的表

3.1、新建目录/tmp/bfile

[oracle@centos651 ~]$ mkdir -p /tmp/bfile/

3.2、创建directory

SQL> create directory BFILEDIR as '/tmp/bfile';

注:关于创建目录的详细方法和目录的权限这里不做介绍,请自行搜索。

3.3、新建两个文件

[oracle@centos651 bfile]$ pwd
/tmp/bfile
[oracle@centos651 bfile]$ cat bfile1.txt 
abcd1234
efgh5678
[oracle@centos651 bfile]$ cat bfile2.txt 
this is a bfile test file!

3.4、创建表

SQL> create table falt_bfile ( id number, bfile_name bfile) ;

Table created.

3.5、初始化表数据

SQL> insert into falt_bfile values (1, BFILENAME('BFILEDIR', 'bfile1.txt'));

1 row created.

SQL> insert into falt_bfile values (2, BFILENAME('BFILEDIR', 'bfile2.txt'));

1 row created.

SQL> commit;

Commit complete.

注:Oracle并不会检查目录和文件是否存在,因此需要用户去保证目录和文件名有效。

4、读取BFILE列的内容

要使用dbms_lob包读取BFILE列的内容

SQL> set serveroutput on;
SQL> declare
  2    buff raw(2000);
  3    amount int;
  4    offset int := 1;
  5    lob_loc bfile;
  6  begin
  7    select bfile_name into lob_loc from falt_bfile where id=1;
  8    dbms_lob.fileopen(lob_loc, 0);                          --打开BFILE文件
  9    amount := dbms_lob.getlength(lob_loc);                  --获取文件大小
 10    dbms_lob.read(lob_loc, amount, offset, buff);           --读取文件内容
 11    dbms_lob.fileclose(lob_loc);                            --关闭BFILE文件
 12    dbms_output.put_line(buff);                             --打印RAW
 13    dbms_output.put_line(utl_raw.cast_to_varchar2(buff));   --转换RAW为CHAR,并打印
 14  end;
 15  /
61626364313233340A65666768353637380A
abcd1234
efgh5678


PL/SQL procedure successfully completed.

SQL> 

5、BFILE字段更新

SQL> select * from falt_bfile where id=2;

        ID BFILE_NAME
---------- ----------------------------------------
         2 bfilename('BFILEDIR', 'bfile2.txt')

SQL> update falt_bfile set bfile_name=BFILENAME('BFILEDIR', 'bfile3.txt') where id=2;

1 row updated.

SQL> select * from falt_bfile where id=2;

        ID BFILE_NAME
---------- ----------------------------------------
         2 bfilename('BFILEDIR', 'bfile3.txt')

SQL> commit;

Commit complete.

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值