删除 Oracle 触发器时修改 ID

Modify Ids on delete Oracle trigger

ID VALUE
0   2
1   3
2   0

当删除第一个id为0的记录时,第二个应该变成0,第三个应该是1。

导致:

ID VALUE
0   3
1   0

删除id为1的记录后,第三个应该变成1。

ID VALUE
0   2
1   0

删除哪个从0开始保持顺序

这个id不是主键。应该在触发器中删除时完成。

不要在触发器中修改相同的 table,您将 运行 变成变异的 table 问题。

另一种方法是使用存储过程并在删除记录后调用它。只需 select 所有大于您删除的 ID 的 ID,然后从中减去 1。

PROCEDURE UPDATE_IDS(deletedID in Number) IS
  BEGIN
    UPDATE table t
    SET ID = ID - 1
    WHERE ID > deletedID;
END UPDATE_IDS;