一个关于插入、删除的触发器问题(不需要更新)。注: QUOTE_ID,NO是PRIMARY KEY
我的QUOTE表查询后如下表:能不能创建一个触发器,具有如下功能.当插入一条记录时,NO自动填上序列:1、2、3、4等等. QUOTE_ID NO NAME
---------- ---------- -------
3546 1 AAA
3546 2 BBB
3546 3 CCC
3546 4 DDD
3547 1 EEE
3547 2 FFF
3547 3 GGG
3547 4 HHH
当删除一条记录时,NO列自动重新排列。
例如,上一个表删除一条记录后,变成下面这个表。
QUOTE_ID NO NAME
---------- ---------- -------
3546 1 AAA
3546 2 CCC
3546 3 DDD
3547 1 EEE
3547 2 FFF
3547 3 GGG
3547 4 HHH
我的QUOTE表查询后如下表:能不能创建一个触发器,具有如下功能.当插入一条记录时,NO自动填上序列:1、2、3、4等等. QUOTE_ID NO NAME
---------- ---------- -------
3546 1 AAA
3546 2 BBB
3546 3 CCC
3546 4 DDD
3547 1 EEE
3547 2 FFF
3547 3 GGG
3547 4 HHH
当删除一条记录时,NO列自动重新排列。
例如,上一个表删除一条记录后,变成下面这个表。
QUOTE_ID NO NAME
---------- ---------- -------
3546 1 AAA
3546 2 CCC
3546 3 DDD
3547 1 EEE
3547 2 FFF
3547 3 GGG
3547 4 HHH
create or replace trigger new_tri
before insert on QUOTE
begin
select max(no)+1 into :new.no from QUOTE
where QUOTE_ID=:new.QUOTE_ID;
end;create or replace trigger new_tr
after delete on QUOTE
declare
begin
update QUOTE
set no=no-1
where QUOTE_ID=:old.QUOTE_ID
and no>old.no;
end;
另外还要考虑第一次插入记录的情况.
create or replace trigger new_tri
before insert on QUOTE
for each row --表示是行级触发器
declare
t_no number;
begin
select count(*) into t_no from QUOTE where QUOTE_ID=:new.QUOTE_ID;
if t_no>0 then
insert into QUOTE_ID(NO)
select max(no)+1 from QUOTE
where QUOTE_ID=:new.QUOTE_ID;
else
insert into QUOTE_ID(NO) values(1);
end if;
end;
create or replace trigger new_tr
after delete on QUOTE
for each row
begin
update QUOTE
set no=no-1
where QUOTE_ID=:old.QUOTE_ID
and no>:old.no;
end;