INSERT INTO table1(id,dept_id,name,description,creation_time,modified_time)
VALUES('id','dept_id','name','description','creation_time','modified_time')
ON DUPLICATE KEY UPDATE dept_id=VALUES(dept_id),name=VALUES(name),
description=VALUES(description),creation_time=VALUES(creation_time),
modified_time=VALUES(modified_time)
Я использовал приведенный ниже оракул для преобразования вышеупомянутого запроса mysql. Запрос завершается с ошибкой. Не могли бы вы помочь мне выяснить, что не так с запросом оракула.
Merge into table1 t1 using
(VALUES ('id','dept_id','name','description','creation_time','modified_time')) as temp
(id,dept_id,name,description,creation_time,modified_time) on t1. id = temp.id
WHEN MATCHED THEN UPDATE SET dept_id=t1.dept_id, description=t1.description, name=t1.name,
creation_time=t1.creation_time, modified_time=t1.modified_time
WHEN NOT MATCHED THEN INSERT (id,dept_id,name,description,creation_time,modified_time)
VALUES ('id','dept_id','name','description','creation_time','modified_time')
Для этого необходимо использовать таблицу или подзапрос в using
пункта (в вашем случае, вам нужен подзапрос).
В Oracle вы можете использовать двойную таблицу, если вам нужно выбрать что-то, без необходимости выбирать из фактической таблицы; это таблица, содержащая только одну строку и один столбец.
Поэтому выражение о слиянии должно выглядеть примерно так:
MERGE INTO table1 tgt
USING (SELECT 'id' id,
'dept_id' dept_id,
'name' NAME,
'description' description,
'creation_time' creation_time,
'modified_time' modified_time
FROM dual) src
ON tgt.id = src.id
WHEN MATCHED THEN
UPDATE
SET tgt.dept_id = src.dept_id,
tgt.description = src.description,
tgt.name = src.name,
tgt.creation_time = src.creation_time,
tgt.modified_time = src.modified_time
WHEN NOT MATCHED THEN
INSERT
(tgt.id,
tgt.dept_id,
tgt.name,
tgt.description,
tgt.creation_time,
tgt.modified_time)
VALUES
(src.id,
src.dept_id,
src.name,
src.description,
src.creation_time,
src.modified_time);
Обратите внимание, что в when not matched
, использует столбцы из исходного подзапроса, вместо того, чтобы использовать введенные значения букв. (Я предполагаю, что в вашем фактическом коде эти буквальные значения являются фактически переменными; creation_time
- довольно странное значение для хранения в столбце с меткой create_time!).
Я также переключил псевдонимы, чтобы сделать их более ясными, где вы сливаетесь в и из; Я нахожу, что это упрощает понимание того, что делает оператор слияния. YMMV.