VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

DBMS_LOB

函数名 参数类型 结果类型 描述
getlength blob/clob/bfile integer 获取指定的LOB对象类型以字节或字符为单位的长度
fileopen bfile、integer bfile 打开一个BFILE指向的操作系统物理文件
read bfile、integer、integer、raw integer、raw 读取bfile指向的物理文件的全部或指定部分内容
fileclose bfiler bfile 关闭由dbms_lob.fileopen打开的文件
  • 用于提供一组对blob、clob和 bfile数据类型操作的函数或过程。

    ---为clob时:
    create table testclob(data clob);
    insert into testclob values('中文测试');
    select dbms_lob.getlength(data) from testclob;
    ---为blob时:
    create table testblob(data blob);
    insert into testblob values(utl_raw.cast_to_raw('中文测试'));
    select dbms_lob.getlength(data) from testblob;
    ---为bfile时:
    存在数据文件/tmp/data/bfiletest/bfile.data
    create directory d_bfile as '/tmp/data/bfiletest';
    create table testbfile(id number,bfile_name bfile);
    insert into testbfile values(1,bfilename('d_file', 'bfile.data'));
    select dbms_lob.getlength(bfile_name) from testbfile where id=1;
    select dbms_lob.fileopen(bfilename('d_file', 'bfile.data'),0);
    select dbms_lob.read(bfilename('d_bfile','bfile.data'), 1, 0, '');
    
    存在数据文件/tmp/data/bfiletest/bfile.data
    --创建目录和表
    create directory d_bfile as '/tmp/data/bfiletest';
    create table testbfile1(id number,bfile_name bfile);
    --调用bfilename函数构造bfile数据并插入到表中
    insert into testbfile1 values(1,bfilename('d_bfile', 'bfile.data'));
    set serveroutput on;
    create or replace function f_read_bfile() returns void as $$
    declare
    buff raw;
    amount int := 0 ;
    offset int :=0;
    lob_loc bfile;
    filesize int;
    begin
    select bfile_name into lob_loc from testbfile1 where id=1;
    --打开BFILE文件
    dbms_lob.fileopen(lob_loc,0);
    --获取文件大小
    filesize := dbms_lob.getlength(lob_loc);
    raise notice 'amount:%',amount;
    --读取文件全部内容
    amount = filesize;
    dbms_lob.read(lob_loc,amount,0,buff);
    dbms_output.put_line('file data:');
    dbms_output.put_line(utl_raw.cast_to_varchar2(buff));
    --读取文件前8字节内容
    amount = 8;
    dbms_lob.read(lob_loc,amount,offset,buff);
    dbms_output.put_line('First eight bytes:');
    dbms_output.put_line(utl_raw.cast_to_varchar2(buff));
    --读取文件剩余内容
    offset = amount;
    amount = filesize - mount;
    dbms_lob.read(lob_loc,amount,offset,buff);
    dbms_output.put_line('The rest bytes:');
    dbms_output.put_line(utl_raw.cast_to_varchar2(buff));
    --关闭bfile文件
    dbms_lob.fileclose(lob_loc);
    return;
    end;
    $$ language plpgsql;
    
    select f_read_bfile();
    --实际的返回结果应是将文件bfile.data中的对应长度的内容打印到界面