【问题标题】:Need to detect the column while using sqlldr使用sqlldr时需要检测列
【发布时间】:2017-05-12 10:00:02
【问题描述】:

操作系统:赢 数据库目标:Oracle 12c 源是文件。 使用:sqlldr

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

让我简要介绍一下数据 TRN 是事务开始的地方,TRNEND 是事务结束的地方。

问题是-TRN1111111119134 记录行,其中我们缺少一列,但该列存在于事务 TRN1111111117134 列中,即 114115,但我在这里的要求是在处理第二笔交易,但这里的所有内容都由空格分隔(我们可以将空格分隔符动态转换为固定的一个或其他分隔符吗?)。 任何建议都会很有帮助。非常感谢。

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,'')")      

本案例的表定义

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))

【问题讨论】:

  • 请包含表定义

标签: oracle file oracle12c sql-loader


【解决方案1】:

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

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

【讨论】:

  • 感谢您的宝贵意见,我曾经将文件中的数据视为空格分隔,但将其视为固定宽度是没有意义的,我之前从未处理过这种要求,但我过去的一切现在工作需要修改,非常感谢。
猜你喜欢
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 2011-11-04
  • 2014-09-04
  • 1970-01-01
相关资源
最近更新 更多