2014-10-16 147 views
0

我已經創建了一個簡單的ODI接口,它將從平面文件讀取並插入到Oracle表中。 ORA-00936::然而,當我執行的接口,它在給予該錯誤消息的步驟的一個失敗缺少表達ODI接口執行錯誤

通過此步驟中生成的代碼是: -

/* DETECTION_STRATEGY = NOT_EXISTS */ 



insert /*+ append */ into ODI_STAGE.I$_CSV_TEST 
    (
    FIRSTNAME, 
    LASTNAME, 
    IND_UPDATE 
) 
select 
FIRSTNAME, 
    LASTNAME, 
    IND_UPDATE 
from (



select 



C1_FIRSTNAME FIRSTNAME, 
C2_LASTNAME LASTNAME, 

'I' IND_UPDATE 


from ODI_STAGE.C$_0CSV_TEST 
where (1=1) 



) S 
where NOT EXISTS 
    (select 1 from ODI_STAGE.CSV_TEST T 
    where 

     and ((T.FIRSTNAME = S.FIRSTNAME) or (T.FIRSTNAME IS NULL and S.FIRSTNAME IS NULL)) and 
     ((T.LASTNAME = S.LASTNAME) or (T.LASTNAME IS NULL and S.LASTNAME IS NULL)) 
     ) 

可以將某些一個請建議這個查詢有什麼問題?因爲我沒有看到它的任何語法問題。

+1

'在哪裏和'是無效的句法沒有介入表達式 – Mat 2014-10-16 10:26:04

+0

哦正確!我怎麼錯過了?但是任何想法ODI如何生成這樣的代碼? – Sparky 2014-10-16 12:02:05

回答

0

看起來像你使用的界面並不那麼簡單。 我看到在FROM子句中嵌套SELECT 要麼使用臨時接口作爲此接口的源(子查詢) 要麼用於此的IKM(集成知識模塊)非常花哨。

通常情況下,IKMs的實現會建立從WHERE (1=1)開始的WHERE條件。由於接口中定義的所有條件可以安全地使用AND (…)插入到此類模板中。

根據所提供的信息,很難說出那裏出了什麼問題。要麼使得這個接口真的很簡單(沒有基於子查詢的派生表),或者更深入地觀察你使用該接口的IKM。

-1

請檢查使用的IKM和LKM。 嘗試使用「IKM Oracle Incremental Update」和「LKM FILE to SQL」。與此你的錯誤應該消失。

1

使用LKM生成的查詢在語法上有什麼錯誤是它在最後一個where子句之後立即插入運算符AND。如果您將代碼複製到SQL開發人員或蟾蜍並運行查詢,您肯定會得到相同的錯誤。如果在最後一個where子句後刪除AND,則查詢將成功運行。