【问题标题】:ODI Interface execution errorODI接口执行错误
【发布时间】:2015-12-26 22:16:53
【问题描述】:

我创建了一个简单的 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))
        )

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

【问题讨论】:

  • where and 在没有中间表达式的情况下是无效语法
  • 哦对了!!!我怎么会错过呢?但是知道 ODI 是如何生成这样的代码的吗?

标签: sql oracle oracle-data-integrator


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    看起来你使用的界面不是那么简单。 我看到 FROM 子句中有嵌套的 SELECT 您正在使用临时接口作为此接口的源(子查询) 或者用于此的 IKM(Integration Knowledge Module)很花哨。

    通常,IKM 的实现会构建从 WHERE (1=1) 开始的 WHERE 条件。由于接口中定义的所有条件都可以随后使用AND (…) 安全地插入到此类模板中。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        • 2015-07-08
        • 2018-11-28
        • 1970-01-01
        • 2011-10-02
        • 2023-04-11
        相关资源
        最近更新 更多