Oracle MERGE(upsert);即使找到匹配,也会导致SEQ val的异常增量

时间:2013-09-11 12:37:50

标签: oracle merge upsert

我使用Oracle 合并来执行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;

1 个答案:

答案 0 :(得分:3)

这是MERGE的预期行为。

参见Metalink注:554656.1“合并增加SEQUENCE.NEXTVAL进行插入和更新”