C# 无论您是在插入还是在更新,该表都将显示。这就是造成上述序列间隔的原因。当您更新一行时,序列仍然会递增。嗯,我知道只有当序列作为查询本身的一部分被引用时,才会发生这种情况。就触发器而言,语句级触发器肯定会触发,但我相信行级插入和更新触发器在合并时的行为是正确
C# 无论您是在插入还是在更新,该表都将显示。这就是造成上述序列间隔的原因。当您更新一行时,序列仍然会递增。嗯,我知道只有当序列作为查询本身的一部分被引用时,才会发生这种情况。就触发器而言,语句级触发器肯定会触发,但我相信行级插入和更新触发器在合并时的行为是正确,c#,sql,oracle,merge,upsert,C#,Sql,Oracle,Merge,Upsert,无论您是在插入还是在更新,该表都将显示。这就是造成上述序列间隔的原因。当您更新一行时,序列仍然会递增。嗯,我知道只有当序列作为查询本身的一部分被引用时,才会发生这种情况。就触发器而言,语句级触发器肯定会触发,但我相信行级插入和更新触发器在合并时的行为是正确的。这里有一个演示也表明了这一点。所以你可能想验证一下。我会自己做,但我正在开会。太棒了,真的很感谢链接。那条线索证实了我的怀疑。我认为merge可能会使insert和update触发器都跳闸,但没有任何证据。我在before insert行触
无论您是在插入还是在更新,该表都将显示。这就是造成上述序列间隔的原因。当您更新一行时,序列仍然会递增。嗯,我知道只有当序列作为查询本身的一部分被引用时,才会发生这种情况。就触发器而言,语句级触发器肯定会触发,但我相信行级插入和更新触发器在合并时的行为是正确的。这里有一个演示也表明了这一点。所以你可能想验证一下。我会自己做,但我正在开会。太棒了,真的很感谢链接。那条线索证实了我的怀疑。我认为merge可能会使insert和update触发器都跳闸,但没有任何证据。我在before insert行触发器中有递增的序列,它被merge命中。
create or replace
PROCEDURE P_SAVE_EXAMPLE_TABLE_ROW
(
pID IN OUT EXAMPLE_TABLE.ID%type,
--Other row params here
pUSER IN EXAMPLE_TABLE.CREATE_USER%type,
pPLSQLErrorNumber OUT NUMBER,
pPLSQLErrorMessage OUT VARCHAR2
)
AS
BEGIN
MERGE INTO USERS_WORKGROUPS_XREF USING dual ON (ID=pID)
WHEN NOT MATCHED THEN
INSERT (--OTHER COLS--, CREATE_USER) VALUES (--OTHER COLS--, pUSER)
WHEN MATCHED THEN
UPDATE SET
--OTHER COLS--
UPDATE_USER=pUSER
WHERE ID=pID;
EXCEPTION
WHEN OTHERS THEN
pID := 0;
pPLSQLErrorNumber := SQLCODE;
pPLSQLErrorMessage := SUBSTR(SQLERRM, 1, 256);
RETURN;
-- STATEMENT TO RETURN LAST AFFECTED ID INTO pID GOES HERE
END;