2017-05-10 77 views
0

操作系统:WIN 数据库目标:Oracle 12c 源是文件。 使用:sqlldr使用sqlldr时需要检测列

我有这种格式的文本数据。我已经在描述中粘贴了示例数据(请将其复制到记事本++)我有这种方式的大量数据,我想用sqlldr将它加载到数据库表中。

让我给你简要的数据TRN是交易开始的地方,TRNEND是结束的地方。

问题是 - TRN1111111119134记录行中我们有一列丢失,但是在事务TRN1111111117134列114115中存在,但我的要求是在处理第一个事务时将空值插入到对应于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)) 
+0

请包括一个表定义 –

回答

0

你输入似乎是一个固定的格式文件中的表定义;试图解释为什么“TOTAL”是第四场而不是第三场,并且可能会变得明显。

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

+0

感谢您的宝贵意见,我用文件查看空白分隔的数据,但不是有意义的看它作为固定的宽度,我从来没有处理过这种要求,但我所有的过去的工作现在需要修改,非常感谢。 – JDev

相关问题