Oracle 使用外部表導入含有LOB字段的數據

閱讀指引:本文介紹如何使用外部表將LOB數據導入Oracle數據庫中

假設,你需要將某個路徑下的全部文件txt文件導入數據庫,並保留對應的文件名。外部文件中LOB字段的位置,應該存放文件名。

$ for n in `ls *.txt`; do echo "$n|$n"; done > test_load.txt # "|"兩邊不要留空,否則外部表讀取文件時會報錯,說找不到該文件
$ cat test.txt
q10_d.txt|q10_d.txt
q11_d.txt|q11_d.txt
q12_d.txt|q12_d.txt
$ pwd
/home/oracle/test_files

在數據庫中:

--創建所需路徑
CREATE OR REPLACE DIRECTORY sql_log AS '/home/oracle/ext_log';
CREATE OR REPLACE DIRECTORY sql_dir AS '/home/oracle/test_files';
--創建外部表
DROP TABLE et_tab;
CREATE TABLE et_tab(
    file_name      VARCHAR2(100),
    file_content   CLOB
)
organization EXTERNAL(TYPE oracle_loader
    DEFAULT DIRECTORY sql_dir
ACCESS PARAMETERS
  (
    RECORDS DELIMITED BY NEWLINE
        BADFILE sql_log : 'textload_%a_%p.bad'
        LOGFILE sql_log : 'textload_%a_%p.log'
    FIELDS TERMINATED BY '|' MISSING FIELD VALUES ARE NULL(
        file_name CHAR(100),
        clob_filename CHAR(100)
    )COLUMN TRANSFORMS (file_content FROM lobfile(clob_filename)
FROM(sql_dir)clob)
  )
    LOCATION('test.txt')
)
PARALLEL 2
REJECT LIMIT UNLIMITED
/
--導入數據
INSERT INTO text_tab(
    file_name,
    file_content
)
    SELECT file_name,file_content 
    FROM et_tab;
COMMIT;

注意:

  • 外部文件和需要導入的文件要在同一路徑下,在此處是sql_dir路徑下。
  • 與別的字段不同,LOB字段上下兩處的名稱不對應,上面是file_content,下面爲clob_filename,需要通過COLUMN TRANSFORMS將lob對應文件名轉換爲文件內容。

參看閱讀:External Tables Containing LOB Data

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章