ODI接口执行错误

时间:2014-10-16 09:56:15

标签: sql oracle oracle-data-integrator

我创建了一个简单的ODI接口,它将从平面文件中读取并插入到Oracle表中。但是,当我执行接口时,它在一个给出错误消息的步骤中失败:ORA-00936:缺少表达式

此步骤生成的代码为: -

  /* 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))
        )

有人可以建议这个查询有什么问题吗?因为我没有看到它的任何语法问题。

3 个答案:

答案 0 :(得分:1)

使用的LKM生成的查询语法错误是它在最后一个where子句之后立即插入运算符AND。如果您将代码复制到sql developer或toad并运行查询,您肯定会得到相同的错误。如果在最后一个where子句之后删除AND,则查询将成功运行。

答案 1 :(得分:0)

看起来你正在使用的界面并不那么简单。 我看到FROM子句中有嵌套的SELECT 要么使用临时接口作为此接口的源(子查询) 或者用于此的IKM(集成知识模块)非常有用。

通常,IKM的实现会从WHERE (1=1)开始构建WHERE条件。多亏了界面中定义的所有条件可以随后使用AND (…)安全地插入到这样的模板中。

根据所提供的信息,很难说出那里出了什么问题。要么使这个界面真正简单(没有基于子查询的派生表),如果是这种情况,或者深入了解您正在使用该界面的IKM。

答案 2 :(得分:-1)

请检查使用的IKM和LKM。 尝试使用" IKM Oracle增量更新"和" LKM FILE到SQL" 。有了这个,你的错误应该消失了。