Seb*_*ián 0 oracle triggers plsql procedure
我是pl/sql的新手.我正在尝试像这样的触发器(adr =删除行之后),但似乎我不能使用ALTER SEQUENCE.这是删除行之后递减的正确方法还是我应该使用过程?
CREATE OR REPLACE TRIGGER adr_trg
AFTER DELETE ON table
FOR EACH ROW
BEGIN
ALTER SEQUENCE table_seq INCREMENT BY -1;
END;
Run Code Online (Sandbox Code Playgroud)
编辑:
我正在使用的序列:
CREATE SEQUENCE table_seq INCREMENT BY 1 START WITH 1;
Run Code Online (Sandbox Code Playgroud)
触发我正在使用:
CREATE OR REPLACE TRIGGER bir_trg
BEFORE INSERT ON table
FOR EACH ROW
BEGIN
IF :new.id IS NULL
THEN
:new.id := table_seq.nextval;
END IF;
END bir_trg;
Run Code Online (Sandbox Code Playgroud)
我可能在这里"阅读各行",但我怀疑你的目标是,如果你在sequence.nextval填充的表中有5个条目,例如
ID
---
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
然后有人删除第5行,您希望将序列恢复为值4.
这有两个问题:
如果有人删除"3"怎么办?您不能将序列回滚2,因为当您使用seq = 3并移至seq = 4时,您将发生冲突
您不能保证序列没有间隙.所有需要的是有人获取序列值,然后发出回滚(或在事务中遇到任何其他类型的错误,并且序列值永远消失)
这让我想到了最重要的问题:
你为什么还要担心差距呢?
| 归档时间: |
|
| 查看次数: |
664 次 |
| 最近记录: |