如何使用sqlldr将单个文件(.csv)列映射到多个表列

问题描述 投票:1回答:1

我有一个文件(.csv)包含列A1,A2,A3和表有列T1,T2,T3,T4,T5。

我想将数据从A2列映射或插入到T2,T3,T4。我可以使用控制文件(.ctl)中的desc_skip FILLER POSITION(1)插入到T2和T3中,但不能插入到T4中。你能帮我吗?如何使用sqlldr将单个文件列值插入表中的两列以上。

请找到我正在使用的控制文件。

LOAD DATA
INTO TABLE EMP
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS 
(
    "T1" INTEGER ,
    "T2" CHAR,  
    desc_skip FILLER POSITION(1),
    "T3" CHAR,
    "T4" CHAR,
    "T5" INTEGER
)

提前致谢。

oracle sql-loader
1个回答
0
投票

你应该使用类似的东西

...
T2 char,
T3 expression ":T2",
T4 expression ":T2",
...

附:我无法想象什么可以“不起作用”。我的例子:

数据库:

SQL> create table t$loader (t1 varchar2(10), t2 varchar2(10), t3 varchar2(10), t4 varchar2(10), t5 varchar2(10));

Table created

CSV文件:

echo 1,2,3 > csv.csv
echo 4,5,6 >> csv.csv
echo 7,8,9 >> csv.csv

控制文件:

load data
  infile 'csv.csv'
  into table t$loader
  fields terminated by ','
(
  t1 char,
  t2 char,
  t3 expression ":t2",
  t4 expression ":t2",
  t5 char
)

跑:

sqlldr userid=user/password@db control=csv.ctl

结果:

SQL> select * from t$loader;

T1         T2         T3         T4         T5
---------- ---------- ---------- ---------- ----------
1          2          2          2          3
4          5          5          5          6
7          8          8          8          9

这不是你要求的吗?

© www.soinside.com 2019 - 2024. All rights reserved.