2014-10-16 144 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,则查询将成功运行。