Я использую 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;