Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

oracle sql:atualize se existir mais insira


MERGE não precisa de "múltiplas tabelas", mas precisa de uma consulta como fonte. Algo assim deve funcionar:
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);

Alternativamente, você pode fazer isso em 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;