在internal这个用户下给scott用户授权如下:
SQL>grant create any directory to scott;
SQL>grant create any library to scott;
在scott这个用户下执行下述语句:SQL>create table bfile_tab (bfile_column BFILE);
SQL>create table utl_lob_test (blob_column BLOB);
SQL>create or replace directory utllobdir as 'C:\DDS\EXTPROC';
SQL>set serveroutput on然后执行下面语句就将C:\DDS\EXTPROC目录下的word文件COM.doc存入到utl_lob_test 
表中的blob_column字段中了。declare
   a_blob  BLOB;
   a_bfile BFILE := BFILENAME('UTLLOBDIR','COM.doc'); --用来指向外部操作系统文件
begin
   insert into bfile_tab values (a_bfile)
     returning bfile_column into a_bfile;
   insert into utl_lob_test values (empty_blob())
     returning blob_column into a_blob;
   dbms_lob.fileopen(a_bfile);
   dbms_lob.loadfromfile(a_blob, a_bfile, dbms_lob.getlength(a_bfile));
   dbms_lob.fileclose(a_bfile);
   commit;
end;
/

解决方案 »

  1.   

    那如果我要把路径作为存储过程的一个参数,是varchar类型的,怎么处理呢?
      

  2.   

    我在sql plus里这样写了:
    create or replace directory mydir as 'e:\temp';
    exec FileToClob('NC_000854','MYDIR','temp.txt');
    其中FileToClob是我的存储过程名称,FileToClob(p_accid IN VARCHAR2,p_Directory IN VARCHAR2,p_FileName IN VARCHAR2)三个参数都是VARCHAR型的,第二个是路径,e:\temp\temp.txt的确存在,可它报错说:对不存在的目录或文件进行FILEOPEN操作!
    这是怎么回事呢?