2013-10-05 171 views
0

我想將客戶信息表導入到我的數據庫。數據文件的結構(純文本)簡要顯示如下。Oracle SQL Loader控制文件分隔符

"Cust_ID Cust_Name Level" 
"0001 Eric Cartman 05" 
"0002 Kyle Broflovski 02" 

通過"包圍每個行是一個記錄,以及分隔符是一個選項卡。所以在我的SQL Loader控制文件,我會寫這樣的事:

FIELDS TERMINATED BY ' ' 
    (Cust_ID, --????? 
    Cust_Name, 
    Level TERMINATED BY '"') 

我想告訴SQL加載到互不理睬Cust_ID"。我應該在這裏添加什麼?謝謝。

+0

我建議先將它加載到臨時表中,並附上引號。然後你可以用更新查詢來擺脫它們。 –

+0

@DanBracuk感謝您的評論。如果這是一個真實的案例,而不是功課,我肯定會照你所說的去做。但由於它是家庭作業,並且要求只是將其加載到臨時表中,所以我想我應該找到一些方法來使臨時表看起來很漂亮:( – goldfrapp04

+0

一旦數據存在,你知道如何擺脫引號登臺表? –

回答

1

您可以使用filler field忽略記錄開始處的雙引號。這定義填充字段我名義上叫quote這是由第一"終止:

options (skip=1) 
load data 
truncate into table t42 
fields terminated by ' ' 
(
    quote filler terminated by '"', 
    cust_id, 
    cust_name, 
    cust_level terminated by '"' 
) 

quote字段的值將是空在這種情況下,但我們無論如何忽略它,這樣並不重要。

與您的數據文件作爲表定義爲:

create table t42(cust_id number, cust_name varchar2(20), cust_level number); 

...您的數據插入爲:

select * from t42; 

    CUST_ID CUST_NAME   CUST_LEVEL 
---------- -------------------- ---------- 
     1 Eric Cartman     5 
     2 Kyle Broflovski    2 

我稱爲第三列cust_level因爲level是保留字;你可以強制它被使用,但會導致你痛苦。還要注意我已經使用了truncate,所以這會替換表中的任何現有數據;如果您要添加新數據,請將其更改爲append