sqlldr:在单个列中加载csv文件的多列

问题描述:

我有一个可包含多列的CSV文件。sqlldr:在单个列中加载csv文件的多列

举例说明记录如下。

3333,Y,ABC 
2222,Y,PQR 
1111,N,FFF 

表有2列

Column 1 (Number), Column 2 (varchar2(4000)). 

我想从CSV加载第一场到表中的第一栏和休息到第2栏文件的各个领域如何实现的呢?

+0

您是否真的尝试编写任何代码来完成它? – FodderZone 2014-09-03 19:46:20

这是一种方法。

CREATE TABLE myt 
(
    col1 NUMBER, 
    col2 VARCHAR2 (200) 
); 

控制文件:

LOAD DATA 
INFILE * 
INSERT 
INTO TABLE MYT 
(
    COL1 terminated by ',', 
    COL2 terminated by '\n' "REPLACE(:COL2,',')" 
) 
BEGINDATA 
3333,Y,ABC 
2222,Y,PQR 
1111,N,FFF 

你的第一列用逗号终止。该行的其余部分被认为是由新行字符终止的单列。如果您想从第二列中删除 逗号,请使用替换功能。

SQL> select * from myt; 

     COL1 COL2 
---------- -------- 
     3333 YABC 
     2222 YPQR 
     1111 NFFF 

为了论证的缘故,下面是另一种方法。使用“吃桃子”的设置,此方法将输入字段定义为BOUNDFILLER,这意味着将它们视为FILLER,但请记住它们以后用作BIND数据。然后使COL2等于输入字段1和2的级联:

LOAD DATA 
INFILE * 
INSERT 
INTO TABLE MYT 
fields terminated by ',' 
trailing nullcols 
(
COL1 
,INPUTCOL2 BOUNDFILLER 
,INPUTCOL3 BOUNDFILLER 
,COL2 ":INPUTCOL2||:INPUTCOL3" 
) 
BEGINDATA 
3333,Y,ABC 
2222,Y,PQR 
1111,N,FFF