【问题标题】:SQL Loader ctl file - how to skip columnsSQL Loader ctl 文件 - 如何跳过列
【发布时间】:2012-02-08 06:48:53
【问题描述】:

假设我的数据库中有 4 列:

Column1, Column2, Column3, Column4 

我的数据文件是 CSV 文件(逗号分隔,列长未知):

xxx,yyy,zzz,000  
a,bb,ccccc,ddddddd  
1,2,3,4  

CTL 将是:

LOAD DATA
INTO TABLE "TABLE" 
FIELDS TERMINATED BY ',' TRAILING NULLCOLS 
(
    Column1,
    Column2,
    Column3,
    Column4     
)

我想跳过 Column3,我该怎么做?我知道FILLER,但它不适用于旧的 oracle 版本。

【问题讨论】:

  • 您使用的是哪个 Oracle 版本?
  • 不同版本包括

标签: sql oracle sql-loader ctl


【解决方案1】:

如果这是一个选项,只需使用 shell 工具删除第三列。这行得通

例如awk:

awk 'BEGIN { FS="," } { print $1 FS $2 FS $4 }' INFILE > TMPOUTFILE

或者sed:

sed 's/^\([^,]\+,[^,]\+,\)[^,]\+,/\1/' INFILE > TMPOUTFILE

(您可以选择其他几个工具(例如cut...)

【讨论】:

    【解决方案2】:

    我真的不知道早期版本是否支持此功能,但在以后的版本中,您可以使用SQL operator

    LOAD DATA
    INTO TABLE "TABLE" 
    FIELDS TERMINATED BY ',' TRAILING NULLCOLS 
    (
        Column1,
        Column2,
        Column3 "decode(:Column3,null,null,null)",
        Column4
    )
    

    ...无论Column3在数据文件中是否有值,都会将其设置为null。

    【讨论】:

      【解决方案3】:

      一种方法是使用中间表或加载表,如下所示:

      LOAD DATA
      INTO TABLE "LOADTABLE" 
      FIELDS TERMINATED BY ',' TRAILING NULLCOLS 
      (
          Column1,
          Column2,
          Column3,
          Column4     
      )
      

      然后调用一个存储过程来处理你的主表的填充,像这样:

      CREATE PROCEDURE pop_table
      IS
         CURSOR cur_load_table
         IS
                    SELECT column1
                         , column2
                         , column4
                      FROM loadtable;
      BEGIN
         FOR rec IN cur_load_table
         LOOP
            INSERT INTO table( column1
                             , column2
                             , column4 )
            VALUES ( rec.column1
                   , rec.column2
                   , rec.column4 );
         END LOOP;
      END pop_table;
      

      【讨论】:

        猜你喜欢
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多