sqlldr : 在单列中加载 csv 文件的多列
Posted
技术标签:
【中文标题】sqlldr : 在单列中加载 csv 文件的多列【英文标题】:sqlldr : Load Multiple columns of a csv file in a single column 【发布时间】:2014-09-03 19:06:23 【问题描述】:我有一个可以包含多列的 CSV 文件。
举例说明记录如下。
3333,Y,ABC
2222,Y,PQR
1111,N,FFF
表格有 2 列
Column 1 (Number), Column 2 (varchar2(4000)).
我想将 CSV 中的第一个字段加载到表的第 1 列,并将文件的所有字段保留到第 2 列。如何实现?
【问题讨论】:
您是否真的尝试过编写任何代码来做到这一点? 【参考方案1】:这是一种方法。
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
【讨论】:
【参考方案2】:为了争论,这里有另一种方法。使用“Eat A Peach”的设置,此方法将输入字段定义为 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
【讨论】:
以上是关于sqlldr : 在单列中加载 csv 文件的多列的主要内容,如果未能解决你的问题,请参考以下文章