SQL * Loader映射不同表列中的DataFile字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL * Loader映射不同表列中的DataFile字段相关的知识,希望对你有一定的参考价值。
我正在尝试从不同表中的数据文件加载数据,我读了很多关于字段声明和分隔(位置(n:n),终止的)。关键是我不知道如何做我需要做的事情。让我用一个例子解释一下。
我有两张桌子(人,电话):person_table(person_id_pk,person_name) - phone_table(person_id_pk,phone)
我有一个数据文件:
$ datafile.txt
1,jack pierson,+13526985442
2,Katherine McLaren,+15264586548
我的观点是,当我声明我的ConfigFile.ctl时,如何指定字段编号3(电话字段)应该插入或附加到“phone_table”,其他两个字段(person_id,person_name)应该插入或附加到“person_table”
考虑到字段不是固定长度,我的参考是字段位置。 (字段数据文件位置)
我想要尝试类似的东西
$configfile.ctl
LOAD DATA
INFILE datafile.txt
APPEND
INTO TABLE person_table
(
person_id_pk POSITION (*) INTEGER EXTERNAL TERMINATED BY "," ,
person_name POSITION(*+1) CHAR(30) TERMINATED BY ","
)
INTO TABLE phone_table
(
person_id_fk POSITION (*) INTEGER EXTERNAL TERMINATED BY ","
phone ------> Right here is my point, how can I specify to SQL Loader than here
should be the field number 3 from datafile
)
我希望你们明白我的观点。这对我来说是一个巨大的问题,因为我正在处理包含60,80甚至100个字段的CSV文件(基于Excel文件的列)。每个字段或字段组可以位于不同的表中。
我非常感谢指南,并帮助你给我。我的示例和控制文件声明可能是错的,我还没有实现任何东西。所以我愿意接受你能给我的每一个建议。
答案
您的控制文件应如下所示。第二个“INTO TABLE”使用POSITION(1)将逻辑“指针”移回当前行的开头,以便可以再次读取它。然后通过将其定义为FILLER来跳过该名称。
LOAD DATA
INFILE datafile.txt
APPEND
INTO TABLE person_table
FIELDS TERMINATED BY "," TRAILING NULLCOLS
(
person_id_pk INTEGER EXTERNAL,
person_name CHAR(30)
)
INTO TABLE phone_table
FIELDS TERMINATED BY "," TRAILING NULLCOLS
(
person_id_fk POSITION(1) INTEGER EXTERNAL,
x_name FILLER,
phone CHAR(12)
)
以上是关于SQL * Loader映射不同表列中的DataFile字段的主要内容,如果未能解决你的问题,请参考以下文章