#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
оператора.