导入blob或clob数据总令人有些头疼。本文记录了用Oracle的SQL*Loader实现该功能的办法。
首先定义一个用于测试的表:
CREATE TABLE msgm_mstr ( msgm_id NUMBER(20), msgm_to VARCHAR2(100), msgm_cc VARCHAR2(100), msgm_subject VARCHAR2(100), msgm_date DATE, msgm_content CLOB );
msgm_content是消息正文,用clob数据类型表示。在数据文件中该字段仅保存每条记录的消息正文的clob文件名。
以下是数据文件示例(假设名为msgm_mstr.tsd):
1,[email protected],,"Greeting from Mars",01-JAN-2006,msg_blob001.dat 2,[email protected],[email protected],"Special discount",02-FEB-2006,msg_blob002.dat
msg_blob001.dat, msg_blob002.dat文件中保存msgm_content的真正内容。
导入上述数据需要写如下控制文件:
LOAD DATA INFILE 'msgm_mstr.tsd' INTO TABLE msgm_mstr FIELDS TERMINATED BY ',' ( msgm_id CHAR(20), msgm_to CHAR(100), msgm_cc CHAR(100), msgm_subject CHAR(100), msgm_date DATE "DD-MON-YYYY" ":msgm_date" clob_filename FILLER CHAR(100), msgm_content LOBFILE(clob_filename) TERMINATED BY EOF )
上述控制文件的关键在于定义一个clob_filename的伪字段(在SQL*Loader中就是filler)以获取clob文件名,紧接着用lobfile从该文件导入消息正文。
如果需要导入blob类型的数据,其方法完全一样。