SQL 加载程序 : Load into 2 Tables from 1 controlfile and 1 CSV

标签 sql loader load-data-infile

表T1结构:col1编号,col2编号

表T2结构:col1编号,col2编号,col3编号

.csv 文件:

row1:1,2,3,4,5,6
row2:1,2,3,4,5,6

我希望表 T1 中的数据为:
col1   col2
=====  ====
1       3
1       3

我希望表 T2 中的数据为:
col1   col2   col3
=====  ====   ==== 
1       3       5
1       3       5

以下控制文件不起作用
load data
infile *
insert into table T1 fields terminated by ',' TRAILING NULLCOLS 
(col1,fill1 filler,col2)
insert into table T2 fields terminated by ',' TRAILING NULLCOLS
(col1,fill2 filler,col2,fill3 filler,col3)
begindata
1,2,3,4,5,6
1,2,3,4,5,6

请帮我解决这个问题。

最佳答案

这确实有效,但我不喜欢这个解决方案。在这些情况下,我更喜欢使用外部表。简短的回答是您遇到了问题,因为 SQLLDR 不会自动重新扫描多行导入的数据。下面是文档中的一个片段。

From the SQLLDR documentation

对多个表加载使用 POSITION

在多表加载中,您指定多个 INTO TABLE 子句。当您为第一个表的第一列指定 POSITION() 时,将相对于逻辑记录的开头计算位置。当您为后续表格的第一列指定 POSITION() 时,将相对于加载的最后一个表格的最后一列计算位置。

因此,当后续的 INTO TABLE 子句开始时,位置不会自动设置为逻辑记录的开头。这允许多个 INTO TABLE 子句处理同一物理记录的不同部分。有关示例,请参阅提取多个逻辑记录。

一个逻辑记录可能包含两个表之一的数据,但不能同时包含两个表的数据。在这种情况下,您将重置 POSITION。对于 INTO TABLE 子句中的第一个字段,不要省略位置说明或使用 POSITION(*+n),而是使用 POSITION(1) 或 POSITION(n)。

    load data
    infile * 
    truncate
    into table T1 
    fields terminated by ',' trailing nullcols
    ( col1  
    , fill1 filler
    , col2  )
    into table T2 
    fields terminated by ','  trailing nullcols
    ( col1 position(1) 
    , filler filler
    , col2    
    , filler2 filler
    , col3 )   

BEGINDATA
1,2,3,4,5,6
1,2,3,4,5,6

SQL> select * From t1;

      COL1       COL2
---------- ----------
         1          3
         1          3

SQL> select* From t2;

      COL1       COL2       COL3
---------- ---------- ----------
         1          3          5
         1          3          5

关于SQL 加载程序 : Load into 2 Tables from 1 controlfile and 1 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/705255/

相关文章:

windows - 如何在 Windows 上设置 gl3w?

typescript - 是否可以使用 webpack 加载程序从文件生成 Typescript 接口(interface)?

ios - 为什么在 iPad 2/iOS 6 上从相机到 AIR 会出现长时间延迟(47 秒) - 相机 UI、Loader、MediaEvent、Media Promise

mysql - 使用 LOAD DATA INFILE 从 CSV 文件导入 MySQL 中的数据

php - 逐行加载数据本地INFILE

sql - 如何使用 ON DUPLICATE KEY UPDATE 插入 MySQL 表?

sql - 如何在 PostgreSQL 中获取两个日期之间的月份数值?

sql - SQL Server 中的 LIKE 函数

mysql - PHPMyAdmin CSV 加载数据受影响的行未显示

sql - 2006 年从德里经过时如何捕获存储过程文本