Ошибка выполнения интерфейса ODI

Я создал простой интерфейс 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 ответа

Синтаксически неправильно с запросом, генерируемым используемым LKM, является то, что он вставляет оператор AND сразу после последнего предложения where. Если вы скопируете код в sql developer или toad и запустите запрос, вы обязательно получите ту же ошибку. Если вы удалите AND после последнего предложения where, запрос будет успешно выполнен.

Похоже, интерфейс, который вы используете, не так прост. Я вижу, что в предложении FROM есть вложенный SELECT. Либо вы используете временный интерфейс в качестве источника (подзапроса) для этого интерфейса, либо IKM (Integration Knowledge Module), используемый для этого, довольно необычен.

Обычно реализация IKM создает условие WHERE, начиная с WHERE (1=1), Благодаря этому все условия, определенные в интерфейсе, могут быть безопасно вставлены с помощью AND (…) в такой шаблон.

На основании предоставленной информации трудно сказать, что там пошло не так. Либо сделайте этот интерфейс действительно простым (без производных таблиц, основанных на подзапросах), если это так, либо посмотрите подробнее на IKM, который вы используете с этим интерфейсом.

Пожалуйста, проверьте используемые IKM и LKM.Попробуйте использовать "Инкрементное обновление Oracle IKM" и "ФАЙЛ LKM в SQL". с этим ваша ошибка должна исчезнуть.

Другие вопросы по тегам