使用sqlldr时需要检测列

Need to detect the column while using sqlldr

OS:获胜 数据库目标:Oracle 12c 来源是文件。 使用:sqlldr

我有一个这种格式的文本数据。我已将示例数据粘贴到描述中(请将其复制到记事本++)我以这种方式拥有大量数据,我想使用 sqlldr 将其加载到数据库 table 中。

简单介绍一下数据,TRN是交易开始的地方,TRNEND是交易结束的地方。

问题是- TRN1111111119134 记录行,我们缺少一列,但它存在于交易 TRN1111111117134 列中,即 114115,但我的要求是在交易时将空值插入对应于第一笔交易中的 114115 的列使用第二笔交易,但这里的所有内容都由白色 space 分隔(我们可以将白色 space 分隔符动态转换为固定分隔符或其他分隔符吗?)。 任何建议都会很有帮助。非常感谢。

TRN1111111117134  211712221635361341111576114115    114115    CLOSE CT                                                                                                                                                                                                                                    J                        J                    J                                                                                                                        JOS
TRNEND11111111181111111111
TRN1111111119134  21171222163536                              TOTAL CTT                                                                                                           VOUCH                                                                                                                   J11111111111115221111    J                    J                                                                                                                        JOS
TRNEND11111111111111111111

我正在尝试使用下面的 sqlldr 控制文件命令,我在这里遗漏了什么吗?

infile 'D:\Source_files\LOG_07117_2017.DAT'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

truncate into table RAW_FILE
 fields terminated by WHITESPACE optionally enclosed by '#'
 TRAILING NULLCOLS
 (  col1 , 
    col2 "nvl(:col2,'')",
    col3 "nvl(:col3,'')", 
    col4 "nvl(:col4,'')",
    col5 "nvl(:col5,'')",
    col6  "nvl(:col6,'')",
    col7 "nvl(:col7,'')",
    col8 "nvl(:col8,'')",
    col9 "nvl(:col9,'')",
    col10 "nvl(:col10,'')",
    col11 "nvl(:col11,'')",
    col12 "nvl(:col12,'')",
    col13 "nvl(:col13,'')",
    col14 "nvl(:col14,'')",
    col15 "nvl(:col15,'')",
    col16 "nvl(:col16,'')",
    col17 "nvl(:col17,'')",
    col18 "nvl(:col18,'')",
    col19 "nvl(:col19,'')",
    col20 "nvl(:col20,'')",
    col21 "nvl(:col21,'')",
    col22 "nvl(:col22,'')",
    col23 "nvl(:col23,'')",
    col24 "nvl(:col24,'')",
    col25 "nvl(:col25,'')",
    col26 "nvl(:col26,'')",
    col27 "nvl(:col27,'')",
    col28 "nvl(:col28,'')",
    col29 "nvl(:col29,'')",
    col30 "nvl(:col30,'')")      

本案例的 table 定义

CREATE TABLE "RAW_FILE" (
     "COL1"     VARCHAR2(4000 BYTE),
     "COL2"     VARCHAR2(4000 BYTE),
     "COL3"     VARCHAR2(4000 BYTE),
     "COL4"     VARCHAR2(4000 BYTE),
     "COL5"     VARCHAR2(4000 BYTE),
     "COL6"     VARCHAR2(4000 BYTE),
     "COL7"     VARCHAR2(4000 BYTE),
     "COL8"     VARCHAR2(4000 BYTE),
     "COL9"     VARCHAR2(4000 BYTE),
     "COL10"    VARCHAR2(4000 BYTE),
     "COL11"    VARCHAR2(4000 BYTE),
     "COL12"    VARCHAR2(4000 BYTE),
     "COL13"    VARCHAR2(4000 BYTE),
     "COL14"    VARCHAR2(4000 BYTE),
     "COL15"    VARCHAR2(4000 BYTE),
     "COL16"    VARCHAR2(4000 BYTE),
     "COL17"    VARCHAR2(4000 BYTE),
     "COL18"    VARCHAR2(4000 BYTE),
     "COL19"    VARCHAR2(4000 BYTE),
     "COL20"    VARCHAR2(4000 BYTE),
     "COL21"    VARCHAR2(4000 BYTE),
     "COL22"    VARCHAR2(4000 BYTE),
     "COL23"    VARCHAR2(4000 BYTE),
     "COL24"    VARCHAR2(4000 BYTE),
     "COL25"    VARCHAR2(4000 BYTE),
     "COL26"    VARCHAR2(4000 BYTE),
     "COL27"    VARCHAR2(4000 BYTE),
     "COL28"    VARCHAR2(4000 BYTE),
     "COL29"    VARCHAR2(4000 BYTE),
     "COL30"    VARCHAR2(4000 BYTE))

您输入的似乎是固定格式的文件;尝试解释为什么 "TOTAL" 是第 4 个字段而不是第 3 个字段,原因可能会很明显。

fields terminated by WHITESPACE optionally enclosed by '#' 替换为每个字段上的特定位置,例如 col3 POSITION (53:62) .