2017-05-10 76 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

相關問題