Използвам Oracle Merge, за да направя UPSERT. Изглеждаше, че работи добре, докато не забелязах, че моята SEQ винаги се увеличава с 1, дори когато когато съвпада, тогава страната на уравнението е изпълнена. Знам, че страната за актуализиране на уравнението се извиква, защото състоянието се актуализира според изискванията (името е първичен ключ, така че това няма да работи само чрез повторно вмъкване на реда). Включих моята процедура по-долу. Някакви идеи защо се случва това?
CREATE OR REPLACE PROCEDURE ff_update(argname VARCHAR,
argstate VARCHAR)
AS
BEGIN
MERGE INTO flags f
USING (SELECT argname name FROM dual) b ON (f.name = b.name)
WHEN MATCHED THEN
UPDATE SET f.state = argstate
WHEN NOT MATCHED THEN
INSERT (f.id, f.name, f.state, f.notes1, f.notes2)
VALUES (id_seq.nextval, argname, argstate, NULL, NULL);
END ff_update;
/
И последователността
create sequence ID_SEQ
start with 1000000
increment by 1
nocache;