閱讀指引:本文介紹如何使用外部表將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對應文件名轉換爲文件內容。