oracle--導出、導入blob類型的字段


blob是oracle中的一個數據類型,保存的是壓縮后的二進制形式的大數據。

數據遷移如果涉及到blob字段,都不好處理,因為無法用常規方法進行操作,如:使用select查看該字段,也無法用insert插入該字段的值。

 

以下記錄了blob字段的導出、導入方法流程。

方法原理:利用UTL_FILE將blob字段的內容以二進制的形式導出到txt文檔,然后用dbms_blob將文檔內容導入到指定的數據庫表中

 

1、創建一個文本文檔來保存blob數據

這里在home目錄下創建了一個名為test.txt的文件,即/home/dhl/test.txt

2、創建oracle臨時目錄

create or replace directory UTL_FILE_DIR as '/home/dhl/';

3、導出blob數據

這里以SY_QRTZ_JOB_DETAILS這張數據表為例子,其中的JOB_DATA就是blob類型的字段

 1 DECLARE
 2   file_handle UTL_FILE.FILE_TYPE;
 3   b_lob BLOB;
 4 BEGIN
 5   select JOB_DATA into b_lob from SY_QRTZ_JOB_DETAILS  where JOB_NAME='2WNfkfZZ14YUodhnYOfEzbl';
 6 
 7   file_handle := utl_file.fopen('UTL_FILE_DIR', 'test.txt', 'W');  
 8   utl_file.PUT_RAW(file_handle , b_lob, true);  
 9   UTL_FILE.FCLOSE(file_handle);
10 END;

 

4、將文檔內容導入到指定的數據庫表中

 1 DECLARE
 2   b_file bfile;
 3   b_lob BLOB;
 4 BEGIN
 5   --return a into b_lob將該列與一個blog類型的變量綁定在一起,以后只要為b_lob賦值,即等於將該值插入了表中
 6   INSERT
 7   INTO SY_QRTZ_JOB_DETAILS
 8     (
 9       SCHED_NAME,
10       JOB_NAME,
11       JOB_GROUP,
12       DESCRIPTION,
13       JOB_CLASS_NAME,
14       IS_DURABLE,
15       IS_NONCONCURRENT,
16       IS_UPDATE_DATA,
17       REQUESTS_RECOVERY,
18       JOB_DATA
19     )
20     VALUES
21     (
22       'RhScheduler',
23       'test6',
24       'DEFAULT',
25       'test6',
26       'com.rh.core.icbc.imp.NImpStateJob',
27       '1',
28       '0',
29       '0',
30       '0',
31       empty_blob()
32     )
33     RETURN JOB_DATA
34   INTO b_lob;
35   --將文件轉換為bfile
36   b_file := bfilename('UTL_FILE_DIR', 'test.txt');
37   dbms_lob.open(b_file, dbms_lob.file_readonly);
38   -- 將b_file中的內容轉換到b_lob
39   dbms_lob.loadfromfile(b_lob,b_file,dbms_lob.getlength(b_file));
40   dbms_lob.close(b_file);
41   COMMIT;
42 END;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM