Oracle Blob資料儲存為檔案

來源:互聯網
上載者:User

標籤:

    好久不寫文,最近得空寫一點。Oracle資料庫國內使用者量主要在企業上,其中有一種byte的儲存稱為Blob,並不能直接看。

    有時候為了調試需要,可以通過:

select UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(xxx,2000,1)) from xxx where xxx = 9667796;

    這種sql去轉為字串查看,但是不方便,一次最多轉出2000個位元組。需要通過index拼成完整的文本。

    另外一種情況下,如果儲存的是圖片、word或其它非文字格式設定的二進位文檔時,就沒辦法通過上面的方法進行查看了。我這裡介紹一種方式可以把Blob儲存到資料庫伺服器所在機器的本地磁碟中去。

   

    預存程序:

 1 CREATE OR REPLACE  2 PROCEDURE SaveBlob(filename VARCHAR) 3 AS 4     v_lob_loc      BLOB; 5     v_buffer       RAW(32767); 6     v_buffer_size  BINARY_INTEGER; 7     v_amount       BINARY_INTEGER; 8     v_offset       NUMBER(38) := 1; 9     v_chunksize    INTEGER;10     v_out_file     UTL_FILE.FILE_TYPE;11 12 BEGIN13     -- 查詢條件(此處根據需求修改)14     SELECT  content15     INTO    v_lob_loc16     FROM    obj_code_file17     WHERE   id = 9667793;18 19     -- 大小20     v_chunksize := DBMS_LOB.GETCHUNKSIZE(v_lob_loc);21     IF (v_chunksize < 32767) THEN22         v_buffer_size := v_chunksize;23     ELSE24         v_buffer_size := 32767;25     END IF;26     v_amount := v_buffer_size;27 28     -- 開啟29     DBMS_LOB.OPEN(v_lob_loc, DBMS_LOB.LOB_READONLY);30 31     -- 寫入32     v_out_file := UTL_FILE.FOPEN(33         location      => ‘EXPDP_DIR‘, 34         filename      => filename, 35         open_mode     => ‘wb‘,36         max_linesize  => 32767);37 38     WHILE v_amount >= v_buffer_size39     LOOP40       DBMS_LOB.READ(41           lob_loc    => v_lob_loc,42           amount     => v_amount,43           offset     => v_offset,44           buffer     => v_buffer);45       v_offset := v_offset + v_amount;46       UTL_FILE.PUT_RAW (47           file      => v_out_file,48           buffer    => v_buffer,49           autoflush => true);50       UTL_FILE.FFLUSH(file => v_out_file);51     END LOOP;52     UTL_FILE.FFLUSH(file => v_out_file);53     UTL_FILE.FCLOSE(v_out_file);54 55     -- 關閉檔案56     DBMS_LOB.CLOSE(v_lob_loc);57 END;

    把預存程序匯入到Oracle中,通過SaveBlob()來調用,參數是要儲存的檔案名稱。儲存的目錄在‘EXPDP_DIR‘中,通過:

select * from ALL_DIRECTORIES;

    可以查看此目錄對應的實體路徑。

    執行完預存程序後,就可以看到匯出後的二進位檔案了。

    轉載請註明原址:http://www.cnblogs.com/lekko/p/5624748.html

Oracle Blob資料儲存為檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.