1

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;
4

1 に答える 1