Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL*加载器映射不同表列中的数据文件字段_Oracle_Weblogic_Oracle Sqldeveloper_Sql Loader - Fatal编程技术网

Oracle SQL*加载器映射不同表列中的数据文件字段

Oracle SQL*加载器映射不同表列中的数据文件字段,oracle,weblogic,oracle-sqldeveloper,sql-loader,Oracle,Weblogic,Oracle Sqldeveloper,Sql Loader,我试图从不同表中的数据文件加载数据,我读了很多关于字段声明和定界(位置(n:n),以结尾)。关键是我不知道该怎么做。让我用一个例子来解释这一点 我有两张桌子(人、电话): 人名表(人名主键,人名)-电话表(人名主键,电话) 我有一个数据文件,其中包含: $ datafile.txt 1,jack pierson,+13526985442 2,Katherine McLaren,+15264586548 我的观点是,当我声明我的ConfigFile.ctl时,我如何指定第3个字段(电话字段)应该

我试图从不同表中的数据文件加载数据,我读了很多关于字段声明和定界(位置(n:n),以结尾)。关键是我不知道该怎么做。让我用一个例子来解释这一点

我有两张桌子(人、电话): 人名表(人名主键,人名)-电话表(人名主键,电话)

我有一个数据文件,其中包含:

$ datafile.txt
1,jack pierson,+13526985442
2,Katherine McLaren,+15264586548
我的观点是,当我声明我的ConfigFile.ctl时,我如何指定第3个字段(电话字段)应该插入或追加到“电话表”中,而其他两个字段(人员id、人员名称)应该插入或追加到“人员表”中

考虑到字段不是固定长度,我的参考是字段位置。(字段数据文件位置)

我想试试这样的东西

$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个字段(基于Excel文件的列)的CSV文件。每个字段或字段组可以位于不同的表中


我真的很感谢你给我的指导和帮助。我的示例和控制文件声明可能是错的,我还没有实现任何东西。所以我愿意接受你给我的每一个建议。

你的控制文件应该是这样的。第二个“INTO TABLE”使用位置(1)将逻辑“指针”移回当前行的开头,以便可以再次读取。然后通过将名称定义为填充符来跳过该名称

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)
)