Close;
        SQL.Clear;
        SQL.Add('Insert into RptDef(RptName,RptBlob) Values(:Name,:Def)');
        ParamByName('Name').AsString:=ReportName;
        ParamByName('Def').LoadFromFile(FileName,ftBlob);  //从本地文件加载报表至数据库
        ExecSql;

解决方案 »

  1.   

    BLOB 是二进制lob,为二进制数据,最长可达4GB,存贮在数据库中。
    你輸入的image是什麼類型的數據?以下兩例參考:1.-- connect sample/...drop table docs;
    create table docs (
      id           number,
      title        varchar2(4000),
      bfile_text   bfile,
      blob_text    blob,
      text1        char(1),
      text2        char(1) );insert into docs ( id, title, bfile_text, blob_text ) values
      ( 1, 'a short essay', bfilename ( 'SAMPLE', 'Test.doc' ), empty_blob() );
    commit;-- Populate the BLOB column with an exact copy of the BFILE columndeclare
      v_length integer;
      v_bfile_text bfile;
      v_blob_text blob;
    begin
      select bfile_text, blob_text
        into v_bfile_text, v_blob_text
        from docs
        where id = 1
        for update;
      v_length := Dbms_Lob.GetLength ( v_bfile_text );  Dbms_Lob.Open ( file_loc => v_bfile_text );
      Dbms_Lob.LoadFromFile (
        dest_lob      => v_blob_text,
        src_lob       => v_bfile_text,
        amount        => v_length,
        dest_offset   => 1,
        src_offset    => 1 );
      Dbms_Lob.Close ( file_loc => v_bfile_text );  update docs set blob_text = v_blob_text
        where id = 1;
      commit;
    end;
    /select
      Dbms_Lob.GetLength ( bfile_text ) l_bfile,
      Dbms_Lob.GetLength ( blob_text )  l_blob
      from docs;-- both should be 19456 characters2.一个插入图片过程:
    CREATE OR REPLACE PROCEDURE insert_photo 
    (p_rno NUMBER, p_photo VARCHAR2) 
    AS 
    f_photo BFILE; 
    b_photo BLOB; 
    Begin-- Update the employee photo
    insert into blob_test values (p_rno,empty_blob())
    RETURN picture into b_photo;-- find where the photo's pointer is located.
    f_photo := bfilename('IMAGE', p_photo);
    -- open the photo as read-only option. 
    dbms_lob.fileopen(f_photo, dbms_lob.file_readonly);
    -- load the photo into column photo. 
    dbms_lob.loadfromfile(b_photo,f_photo, dbms_lob.getlength(f_photo));
    -- close the photo's pointer. 
    dbms_lob.fileclose(f_photo);
    -- Save the loaded photo record. 
    COMMIT;
    EXCEPTION
    -- Check for your error messages
    WHEN others THEN
    dbms_output.put_line('*** ERROR *** Check you procedure.');
    END;
      

  2.   

    在Oracle 8i的SQL*Plus中如何利用LOB字段存取操作系统二进制文件
    Oracle 8i数据库系统功能比前面版本更加完善,尤其是出现了BLOB,CLOB,NCLOB,
    BFILE这些LOB(大型对象)类型来取代功能有限的LONG、LONGRAW类型。BLOB字段最
    大长度为4G(4,294,967,295)字节,而且不再象LONGRAW那样每个表中只是限制有一
    个字段是LONGRAW(最长2G)型的。BLOB,CLOB,NCLOB为内部BLOB(数据通常在数据
    库中存放),BFILE为外部LOB(所存储的只是指向外部操作系统文件的指针),用户可
    以使用PL/SQL的包DBMS_LOB来处理LOB数据,但是遗憾的是,DBMS_LOB包只能将二进
    制操作系统文件写入到BLOB字段中,却无法将BLOB字段中的二进制操作系统文件取回
    到操作系统中,估计将来会有所改善。本文将就如何在SQL*Plus将WORD文件存入取出
    ORACLE中作详细解释说明,供各位同行参考。在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;
    /
    SQL>show errors
    此时可以使用DBMS_LOB包的getlength这个procedure来检测是否已经将该word文件存入
    到blob字段中了。如:
    SQL> select dbms_lob.getlength(blob_column) from UTL_LOB_TEST;
    结果如下:
    DBMS_LOB.GETLENGTH(BLOB_COLUMN)
    -------------------------------
                   83968
    说明该word文件已经存入到blob字段中去了。