甲骨文合并 (更新) ;即使找到匹配项,SEQ 值也会异常增加



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

这是 MERGE 的预期行为。

请参阅元链接注释:554656.1"合并增量序列。用于插入和更新的下一个值"

最新更新