Ошибка Oracle : ORA — 00905 : Отсутствует ключевое слово

#sql #oracle

#sql #Oracle

Вопрос:

Я выполняю эту инструкцию SQL:

 MERGE INTO INTERVIEW OLD_R USING NEW_INTERVIEW NEW_R ON (NEW_R.REG_NO = OLD_R.REG_NO) WHEN MATCHED  AND (NEW_R.NAME lt;gt; OLD_R.NAME OR NEW_R.MOB_NO lt;gt; OLD_R.MOB_NO) THEN UPDATE SET   OLD_R.NAME = NEW_R.NAME,  OLD_R.MOB_NO = NEW_R.MOB_NO WHEN NOT MATCHED BY OLD_R  THEN   INSERT(OLD_R.NAME, OLD_R.REG_NO, OLD_R.MOB_NO)  VALUES(NEW_R.NAME, NEW_R.REG_NO, NEW_R.MOB_NO) WHEN NOT MATCHED BY NEW_R THEN DELETE;  

в базе данных Oracle для резервного копирования вызываемой таблицы assignment , но я получаю эту ошибку:

ORA-00905: Отсутствует ключевое слово

Ответ №1:

Неправильный синтаксис. Должно было быть

 MERGE INTO INTERVIEW OLD_R  USING NEW_INTERVIEW NEW_R  ON (NEW_R.REG_NO = OLD_R.REG_NO) WHEN MATCHED THEN  UPDATE SET OLD_R.NAME = NEW_R.NAME, OLD_R.MOB_NO = NEW_R.MOB_NO  WHERE NEW_R.NAME lt;gt; OLD_R.NAME  OR NEW_R.MOB_NO lt;gt; OLD_R.MOB_NO WHEN NOT MATCHED THEN  INSERT (OLD_R.NAME, OLD_R.REG_NO, OLD_R.MOB_NO)  VALUES (NEW_R.NAME, NEW_R.REG_NO, NEW_R.MOB_NO);  

Ответ №2:

 WHEN MATCHED  AND (NEW_R.NAME lt;gt; OLD_R.NAME OR NEW_R.MOB_NO lt;gt; OLD_R.MOB_NO) THEN UPDATE SET   OLD_R.NAME = NEW_R.NAME,  OLD_R.MOB_NO = NEW_R.MOB_NO  

Должно быть

 WHEN MATCHED THEN  UPDATE  SET OLD_R.NAME = NEW_R.NAME,  OLD_R.MOB_NO = NEW_R.MOB_NO  WHERE NEW_R.NAME lt;gt; OLD_R.NAME OR NEW_R.MOB_NO lt;gt; OLD_R.MOB_NO  

Затем

 WHEN NOT MATCHED BY OLD_R   

Должно быть просто:

 WHEN NOT MATCHED  

и:

 WHEN NOT MATCHED BY NEW_R THEN DELETE;  

Это не синтаксис, поддерживаемый Oracle; вам нужно будет удалить эти строки с помощью отдельного DELETE оператора.