grant create any directory to scott;
grant create any library to scott;
create or replace directory utllobdir as 'G:\oracle';
create table bfile_tab (bfile_column BFILE);
create table utl_lob_test (blob_column BLOB);set serveroutput on然后执行下面语句就将G:\oracle目录下的Azul.jpg存入到utl_lob_test 
表中的blob_column字段中了。
declare
   a_blob  BLOB;
   a_bfile BFILE := BFILENAME('UTLLOBDIR','Azul.jpg'); 
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;
/
select dbms_lob.getlength(blob_column) from UTL_LOB_TEST;

解决方案 »

  1.   

    SQL> grant create any directory to scott;授权成功。SQL> grant create any library to scott;授权成功。SQL> create or replace directory utllobdir as 'G:\oracle';目录已创建。SQL> create table bfile_tab (bfile_column BFILE);表已创建。SQL> create table utl_lob_test (blob_column BLOB);表已创建。SQL> 
    SQL> set serveroutput on
    SQL> 
    SQL> 然后执行下面语句就将G:\oracle目录下的Azul.jpg存入到utl_lob_test 
    SP2-0734: 未知的命令开头 "然后执行下..." - 忽略了剩余的行。
    SQL> 表中的blob_column字段中了。
    SP2-0734: 未知的命令开头 "表中的blob..." - 忽略了剩余的行。
    SQL> declare
      2     a_blob  BLOB;
      3     a_bfile BFILE := BFILENAME('UTLLOBDIR','Azul.jpg'); 
      4  begin
      5     insert into bfile_tab values (a_bfile)
      6       returning bfile_column into a_bfile;
      7     insert into utl_lob_test values (empty_blob())
      8       returning blob_column into a_blob;
      9     dbms_lob.fileopen(a_bfile);
     10     dbms_lob.loadfromfile(a_blob, a_bfile, dbms_lob.getlength(a_bfile));
     11     dbms_lob.fileclose(a_bfile);
     12     commit;
     13  end;
     14  /
    declare
    *
    ERROR 位于第 1 行:
    ORA-22288: 文件或 LOB 操作FILEOPEN失败
    系统找不到指定的文件。
    ORA-06512: 在"SYS.DBMS_LOB", line 475
    ORA-06512: 在line 9
    SQL> select dbms_lob.getlength(blob_column) from UTL_LOB_TEST;未选定行