我的测试表,结构如下
表名Test
字段          类型 
ID       数值型
MYFILE    Blob我想要做的是向Test中插入我硬盘上指定的任意文件,例如一副图片。求一个Procedure,望大虾们不吝赐教~~~

解决方案 »

  1.   

    学习阶段, 楼主可以参考一下create or replace procedure copyfiletoblob(
    p_id integer,
    p_directory varchar2,
    p_filename varchar2)
    AS
    v_file_blob blob;
    v_file_name bfile;
    v_dest_offset integer:=1;
    v_src_offset integer:=1;
    begin
      insert into test1026(id,myfile) values (p_id,empty_blob())
      returning myfile into v_file_blob;  v_file_name :=bfilename(p_directory,p_filename);
      --open file
      dbms_lob.open(v_file_name,dbms_lob.file_readonly);
      dbms_lob.loadblobfromfile(v_file_blob,v_file_name,dbms_lob.getlength(v_file_name),v_dest_offset,v_src_offset);
      dbms_lob.close(v_file_name);  commit;
      end copyfiletoblob;
    /
    create the BFILE directory-- create the BFILE directory
    CREATE DIRECTORY SAMPLE_FILES_DIR AS 'C:\test';
    SQL> call copyfiletoblob(3,'SAMPLE_FILES_DIR','cry.mp3');调用完成。
    SQL> select id, dbms_lob.getlength(myfile) from test1026;        ID DBMS_LOB.GETLENGTH(MYFILE)
    ---------- --------------------------
             1                    5577886
             3                    5577886SQL> call copyfiletoblob(4,'SAMPLE_FILES_DIR','cs.txt');调用完成。SQL> select id, dbms_lob.getlength(myfile) from test1026;        ID DBMS_LOB.GETLENGTH(MYFILE)
    ---------- --------------------------
             1                    5577886
             3                    5577886
             4                         22SQL>
      

  2.   

    问题解决了。
    其实我的本来目的是想在.net里实现上传文件,本来想着用个oracle的过程,在.net里调用会简单一点,结果发现这样似乎更麻烦。于是直接用.net代码实现就可以了,几行就搞定。
    不过也多谢楼上了,让我对oracle又多了解了一点。