【问题标题】:sqlldr : Load Multiple columns of a csv file in a single columnsqlldr : 在单列中加载 csv 文件的多列
【发布时间】: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 列。如何实现?

【问题讨论】:

  • 您是否真的尝试过编写任何代码来做到这一点?

标签: sql oracle csv sql-loader


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 2016-06-04
      • 1970-01-01
      相关资源
      最近更新 更多