现想从test表中取一blob字段值,写入二进制文件中,在存储过程中咋么实现。

解决方案 »

  1.   

    SQL> conn / as sysdba
    已连接。
    SQL> create or replace directory BLOBDIR as 'd:\oracle\bfile';
    目录已创建。
    SQL> grant read,write on directory BLOBDIR to test;
    授权成功。 conn test/testCREATE OR REPLACE PROCEDURE iihero_dump_blob(piname varchar2,poname varchar2) IS
      l_file      UTL_FILE.FILE_TYPE;
      l_buffer    RAW(32767);
      l_amount    BINARY_INTEGER := 32767;
      l_pos       INTEGER := 1;
      l_blob      BLOB;
      l_blob_len  INTEGER;
    BEGIN
      SELECT f  INTO l_blob  FROM iihero_blob  WHERE  FNAME = piname;
      l_blob_len := DBMS_LOB.GETLENGTH(l_blob);
      l_file := UTL_FILE.FOPEN('BLOBDIR',poname,'wb', 32767);  WHILE l_pos < l_blob_len LOOP
        DBMS_LOB.READ (l_blob, l_amount, l_pos, l_buffer);
        UTL_FILE.PUT_RAW(l_file, l_buffer, TRUE);
        l_pos := l_pos + l_amount;
      END LOOP;  UTL_FILE.FCLOSE(l_file);EXCEPTION
      WHEN OTHERS THEN
        IF UTL_FILE.IS_OPEN(l_file) THEN
          UTL_FILE.FCLOSE(l_file);
        END IF;
        RAISE;
    END;
    /
    exec iihero_dump_blob('ttt.txt', 'ttt_out.txt')即把对应于文件名为ttt.txt的blob值导出到文件ttt_out.txt当中。
      

  2.   

    再更正一下,上边的
      l_file := UTL_FILE.FOPEN('BLOBDIR',poname,'wb', 32767); 
    中的'wb'应该改为'w'
      

  3.   

    参考:http://topic.csdn.net/t/20021216/17/1266283.html