2017-12-18 85 views
1

我有一个文件(.csv)包含列A1,A2,A3,并且表具有列T1,T2,T3,T4,T5。如何使用sqlldr将单个文件(.csv)列映射到多个表列使用sqlldr

我要地图或插入从A2列数据以T2,T3,T4.I是能够插入到 T2和T3使用FILLER desc_skip位置(1)中的控制文件(.CTL),但不是在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 
) 

在此先感谢。

+0

这还不清楚。你想在三列中填充相同的值吗?或以某种方式拆分数据? – APC

+0

是希望在三列中填充相同的值。 – Mahesh

回答

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/[email protected] 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 

是不是你要求的?

+0

Hi Sanders,谢谢你的回复。但它是行不通的。请你帮助我如何通过在.ctl文件中配置将A2列值复制到T2,T3,T4列。 – Mahesh

+0

谢谢桑德斯。它的工作now.Thank你很 – Mahesh

+0

TRAILING NULLCOLS ( “T1” INTEGER外部NULLIF “T1”= BLANKS, \t “T2” CHAR NULLIF “T2”= BLANKS, \t “T3” CHAR NULLIF “T3”= BLANKS “:T2”, \t“T4”INTEGER EXTERNAL NULLIF“T4”= BLANKS, \t“T5”INTEGER EXTERNAL NULLIF“T5”= BLANKS“:T4”)Hi Sanders,我在Java程序中使用时遇到问题, sqlldr命令插入upto T3列only.copy选项(“:T2”)正常工作。它正在跳过T4和T5。你能帮忙吗? – Mahesh

相关问题