我现在用insert into tables(xx,xx) values(x,xx);如果图片(文件)的大小在6k左右,大概不超过10k的样子,可以正常保存,但是如果文件大了(测试文件大小,一个44k,一个2M),都不能插入数据,并提示错误:
转换请求无法实现或者不合理.
是什么原因?我个人分析是
我存储过程定义的是blob类型,而数据库参数传入的值是byte[]类型的,是不是跟这个有关系?但是如果有关系为什么几k的小文件能够正常保存呢?谢谢!

解决方案 »

  1.   

    例子:
    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;
      

  2.   

    我这样做了,但是提示:
    文件或LOB操作FileOpen失败文件名/目录名或卷标语法不正确.是什么原因?
      

  3.   

    我没有用create or replace directory utllobdir as 'G:\oracle';
    而是直接传递路径: 'C:\xxx\Temp\3.gif'
      

  4.   

    "ORA-22288: 文件或 LOB 操作FILEOPEN失败
    文件名、目录名或卷标语法不正确。
    ORA-06512: 在"SYS.DBMS_LOB", line 504
    ORA-06512: 在"ERP_ATTACHMENT", line 95
    ORA-06512: 在line 1
    "