2015-07-13 25 views
0

我想一些數據加載到一個表,但是數據源都有我想刪除,並對此我NULL值要加載的SQLLOADER當子句包括空

我的控制頁腳記錄文件目前有:

echo "WHEN field1 <> 'FOOTER'" 

但這是放棄空記錄(所有其他正在按預期工作)。

有沒有一種方法可以包含一個'或'運算符,或者在單個控制文件中以兩步加載的方式運行,例如:步驟1.處理除'FOOTER'之外的所有記錄步驟2 - 處理所有NULL記錄。

回答

0

我設法解決這個問題: 解決的辦法是把它當作兩個不同的負載,所以我的控制文件看起來像:

echo "APPEND INTO TABLE table.t1" 
echo "WHEN (1:1)=' '" 
echo "(" 
.... 
echo ")" 
echo "INTO TABLE table.t1" 
echo "WHEN field != 'FOOTER'" 
echo "(" 
.... 

然後處理NULL記錄,然後處理非頁腳記錄。我在將field1的固定長度與NULL值進行匹配時遇到了困難 - 但是,只需要一次長度檢查即可。

希望這回答了其他人也在努力的問題。

+0

OPTION子句中還有一個」LOAD = n「組件,允許您指定要加載的行數如果您使用LOAD = <文件中的行數 - 1>請看這裏的OPTION子句:http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_control_file.htm#i1004788 –

+0

是的,我研究過這個,但是記錄的數量是可變的,我還考慮從輸入文件中刪除頁腳(重定向到另一個文件以保留原文)但是這些並不是我想要採用的方法,因爲我希望自動加載過程儘可能地保持在表格之間的類似之處 - 唯一的區別是使用的控制文件 - 以便於調試和增強。 –

0

你可以試試這個...

load data 
infile ... 
into table ... 
... 
... 
when some_column != 'FOOTER' 
... 
fields terminated by ', ' 
+0

我已經嘗試過這一點,它沒有work.I可以刪除when子句,它會按預期處理所有內容(單個頁腳記錄被丟棄),但是我不希望每一次這個過程都丟棄文件如果我能幫助它,就運行。我有:echo「APPEND INTO TABLE table.t1」 echo「when field1!='FOOTER'」 echo「fields terminated by'','' echo」(「 echo」field1 POSITION(01:07)\「 REPLACE(UPPER(:field1),'')\「,」 echo「field2 POSITION(09:14)\」DECODE(:field2,'000000',NULL,TO_DATE(:field2,'DDMMYY'))\「 ,「... –