我正在使用 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;