我有一个表,如果已经存在一条记录,则必须对其进行修改,否则必须插入一条新记录。Oracle sql
不接受IF EXISTS
,否则我将进行if - update - else - insert
查询。我看过了,MERGE但它仅适用于多个表。我该怎么办?
MERGE不需要“多个表”,但确实需要查询作为源。这样的事情应该起作用:
MERGE INTO mytable d
USING (SELECT 1 id, 'x' name from dual) s
ON (d.id = s.id)
WHEN MATCHED THEN UPDATE SET d.name = s.name
WHEN NOT MATCHED THEN INSERT (id, name) VALUES (s.id, s.name);
或者,您可以在PL / SQL中执行此操作:
BEGIN
INSERT INTO mytable (id, name) VALUES (1, 'x');
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
UPDATE mytable
SET name = 'x'
WHERE id = 1;
END;