2013-04-26 59 views
2

我正在使用sql loader加載一個csv文件。其中一列應該是布爾值。但Oracle不支持布爾數據類型。所以我需要添加驗證或約束。當我在列上添加一個約束時,它在直接加載期間會被忽略,因此之後需要手動干預來整理。如果我嘗試在控制文件中使用驗證,sql loader不支持OR運算符,只是AND。所以我不能做什麼當colA ='true'或colA ='false'Oracle sql loader驗證

我看到一些網站曾說過要嘗試類似於下面的內容,但是第一個WHEN子句是唯一被接受並忽略第二個加載。

OPTIONS (direct=true) 
load data 
TRUNCATE 
INTO TABLE TABLE_A 
    WHEN PAY='false' 
    FIELDS TERMINATED BY ',' 
    (ID, NAME, PAY) 
INTO TABLE TABLE_A 
    WHEN PAY='true' 
    FIELDS TERMINATED BY ',' 
    (ID, NAME, PAY) 

任何人都可以提供任何幫助。謝謝

回答

0

您可以在SQL * Loader字段列表中使用SQL運算符對該值執行CASE或DECODE以將其轉換爲整數,或者您想要表示布爾值。

documentation中的示例。

+0

感謝大衛,但我不想改變數據的表示。 0 = true且1 = false,將意味着應用程序層發生更多更改以將其更改回來。有沒有其他可能的解決方案? – Seamus 2013-04-26 10:20:10

+0

然後,我不確定你想要做什麼。 – 2013-04-26 10:38:58

+0

我只想將真或假的值加載到表中。當使用sql loader時,沒有內置約束條件,我不能將列定義爲布爾類型來拒絕它們。所以我需要在sql loader中寫一些東西來實現邏輯。如果case匹配,CASE語句允許您更改值,但我沒有看到任何顯示我可以寫入CASE PAY ='false'然後加載INTO的任何位置....如果您知道這樣的方式,一個例子?很多感謝您的意見大衛。 – Seamus 2013-04-26 11:16:18