BFILE类型存储的文件必须在Oracle服务器上,或服务器能访问到的路径上。
用存储过程实现如下:
先建立一个目录对象:
CREATE DIRECTORY 目录名 AS '操作系统实际的目录'CREATE PROCEDURE DISPATCHMIS.P_TEST(av_fileName varchar2)
IS
v_fil BFILE;
BEGIN
   v_fil := BFILENAME('目录', av_fileName);
INSERT INTO TABNAME (BFILE字段名)VALUES(v_fil );
COMMIT;
END;

解决方案 »

  1.   

    --创建LOB表
    create table proposal
    (proposal_id         number(10),
     recipient_name      varchar2(25),
     proposal_name       varchar2(25),
     short_description   varchar2(1000),
     proposal_text       clob,  --字符型LOB,字符数据,最长为4GB,存储在数据库中
     budget              blob,  --二进制LOB,二进制数据,最长为4GB,存储在数据库中
     cover_letter        bfile, --二进制文件,存储在数据库外部的只读二进制数据,其长度受操作系统限制中
     constraint proposal_pk primary key (proposal_id))
    --创建目录,用于bfile外部文件的使用
    create or replace directory proposal_dir as 'c:\lob';
    --数据插入,如果一个内部存储的lob字段为NULL,那么在更新为非NULL值前,必须设定为空位置指针
    --BLOB空文件使用EMPTY_BLOB()
    --CLOB空文件使用EMPTY_CLOB()
    --NCLOB空文件使用EMPTY_CLOB()
    --BFILE空文件使用BFILENAME,oracle不维护外部文件的数据完整性
    insert into proposal
    (proposal_id,recipient_name,proposal_name,short_description,
     proposal_text,
     budget,
     cover_letter)
    values
    (1,'DOT RODALE','MAINTAIN ORGANIC GARDEN',NULL,
     'THIS IS THE TEXT OF A PROPOSAL TO MAINTAIN AN ORGANIC GARDEN.',
     EMPTY_BLOB(),
     BFILENAME('proposal_dir','P2.TXT'));