删除 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;
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;