【问题标题】:Sqlldr tab delim file load issueSqlldr tab delim 文件加载问题
【发布时间】:2019-07-02 05:24:54
【问题描述】:

我正在尝试将制表符分隔符文件加载到表中。 请检查以下问题并提供帮助。

LOAD DATA
INFILE 'tab1.txt'
BADFILE 'tab1.bad'
DISCARDFILE 'tab1.dsc'
REPLACE INTO TABLE CL_TAB1 
FIELDS TERMINATED BY X'9' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
A,B,C,D,E
)

tab1.txt 文件如下所示

A   B   C   D   E
799 CP  AM  27-12-2017
800 CP      18-05-2017
801             USA     
  1. 如果我没有提到带有列名的 TRAILING NULLCOLS,sqlldr 只会将空值加载到表中。
  2. 当我在 TRAILING NULLCOLS 中列出 col 名称时,sqlldr 在表中加载如下所示。

A   B   C   D   E
799 CP  AM  27-12-2017      (Note: this is ok record)
800 CP  18-05-2017          (Note: 18-05-2017 should be loaded onto D col, but loaded onto C)
801 USA                     (Note: USA should be loaded onto E col, but loaded onto B)

请帮忙。

【问题讨论】:

    标签: oracle sql-loader


    【解决方案1】:

    如果你不提到OPTIONALLY ENCLOSED BY '"' --> SQLLDR 工作正常。

    看我的例子:

    DDL

    DROP TABLE TAB1;
    
    CREATE TABLE TAB1 (
        A   VARCHAR2(100),
        B   VARCHAR2(100),
        C   VARCHAR2(100),
        D   VARCHAR2(100),
        E   VARCHAR2(100)
    );
    

    Tab1.txt

    A   B   C   D   E
    799 CP  AM  27-12-2017
    800 CP      18-05-2017
    801             USA
    

    控制文件

    LOAD DATA
    INFILE 'tab1.txt'
    BADFILE 'tab1.bad'
    DISCARDFILE 'tab1.dsc'
    REPLACE INTO TABLE TAB1 
    FIELDS TERMINATED BY X'9'
    TRAILING NULLCOLS
    (
    A,B,C,D,E
    )
    

    SQLLDR 执行

    >sqlldr userid=tejash/***** control=tab1.ctl
    
    SQL*Loader: Release 12.2.0.1.0 - Production on Tue Jul 2 11:43:33 2019
    
    Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.
    
    Path used:      Conventional
    Commit point reached - logical record count 3
    Commit point reached - logical record count 4
    
    Table TAB1:
      4 Rows successfully loaded.
    
    Check the log file:
      tab1.log
    for more information about the load.
    

    表 TAB1 中的数据

    A   B   C   D   E
    799 CP  AM  27-12-2017  
    800 CP      18-05-2017  
    801             USA
    

    文本文件的第一行只是一个标题,如果你想跳过标题,那么你需要在控制文件中使用OPTIONS(skip=1)

    【讨论】:

    • 您说“如果您没有在列名中提及 TRAILING NULLCOLS --> SQLLDR 工作正常。”但可能是说OPTIONALLY ENCLOSED BY '"'
    • 哦,我的错!更新了答案
    • 谢谢,效果很好。我还有一个问题...请帮忙。在少数记录中,我在文件中有一个字段,比如 C 和下面的数据 - 在引号、值和逗号内,然后是制表符和值示例:“XXXX,YYY-YYY”因此,表被加载为低于 C D XXXX YYY-YYY
    • 我认为这是限制,我不知道。对不起!!。您可以写另一个问题,以便其他专家可以提供帮助。您可以在新问题中参考此问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    相关资源
    最近更新 更多