使用SQL * LOADER将数据导入两个表

时间:2014-05-05 05:25:17

标签: sql oracle sql-loader

我正在尝试将数据导入两个表,但无法导入第二个表。我按照在线指示进行操作,但我不知道错误在哪里,

我的CTL文件是,

-- THIS IS TO LOAD DATA INTO EMPTY TABLE
LOAD DATA
INFILE "C:\Component Folder\POWERHOUSEASSYLIST.csv" 
BADFILE "POWERHOUSEASSYLIST.bad" 
DISCARDFILE "POWERHOUSEASSYLIST.dsc"

INSERT INTO TABLE "MASTER_DRAWING"
FIELDS TERMINATED BY ";" OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
( 
HEAD_MARK,
QTY,
COMP_TYPE,
PROFILE,
SURFACE,
WEIGHT,
REV_DATE "SYSDATE",
REV_NO "1"
)

INTO TABLE "FABRICATION"
FIELDS TERMINATED BY ";" OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
( 
HEAD_MARK,
MARKING "0",
CUTTING "0",
ASSEMBLY "0",
WELDING "0",
DRILLING "0",
FINISHING "0",
REV_DATE "SYSDATE",
ID "1"
)

1 个答案:

答案 0 :(得分:1)

根据documentation

  

使用多个INTO TABLE子句时的一个关键点是,当处理新的INTO TABLE子句时,字段扫描将从它停止的位置继续。

您尚未显示样本数据。但我认为它可能看起来像这样。

a;b;c;d;e;f;g;h;
1;2;3;4;5;6;7;8;

数据文件中只有8列,表MASTER_DRAWING也有8列。一旦扫描到最后一列并加载数据 MASTER_DRAWING,而不是到达行的开头,它从停止的地方继续。但是在第8列之后没有数据,因此没有加载任何数据 到FABRICATION表。

您可以通过将数据文件中的少数记录更改为包含8列以上来验证这一点。在这种情况下,第九列将插入INTO 制作表。

作为另一种方法,您可以使用sqlloader仅加载MASTER_DRAWING,然后使用简单的insert ... select语句来获取HEAD_MARK 从MASTER_DRAWING到FABRICATION表。

insert into FABRICATION
select HEAD_MARK, 0, 0, 0, 0, 0, 0, sysdate, 1
from MASTER_DRAWING;