trigger:每次update table1,table2字段值自增1,不运行?

rolandzhang 2003-10-14 11:20:43
create or replace trigger afupdate
after update on contact
referencing new as new old as old
for each row
declare
v_registerday_old table2.registerdayold%type; --记录修改前的内容;
v_times table2.times%type; --记录修改次数的变量
v_count number;
select count(*) into v_count from table2 where id like ':old.id'; --table2 为历史记录表,更新table1.registerday字段时,判

断table2是否有记录
if v_count>0 then
select max(times) into v_times form table2 where id like ':old.id';
v_times:=v_times+1; --此句没有执行???

else
v_times:=1; --如果table2 中没有记录,则;
end if;
if :new.registerday<>:old.registerday then
v_registerdayold:=null;
else
v_registerdayold:=:old.registerday; --记录修改前的值;
end if;
insert into table2(id,name,registerdayold,times)
values(:new.id,:new.name,v_registerdyaold,v_times);
end afupdate;
想得到的结果:
table1 : 更新前 registerday=2002-01-02
第一次更新 registerday=2003-5-1
第二此更新 registerday=2003-10-10
table2: id name registerdayold times
3 test 2002-01-02 1
3 test 2003-05-0 2
...全文
40 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
beckhambobo 2003-10-14
  • 打赏
  • 举报
回复
create or replace trigger afupdate
after update on contact
referencing new as new old as old
for each row
declare
v_registerday_old table2.registerdayold%type; --记录修改前的内容;
v_times table2.times%type; --记录修改次数的变量
v_count number;
begin
begin
select max(times) into v_times form table2 where instr(id,:old.id)>0;
v_times:=v_times+1;
exception
when others then
v_times:=1;
end;

if :new.registerday<>:old.registerday then
v_registerdayold:=null;
else
v_registerdayold:=:old.registerday; --记录修改前的值;
end if;
insert into table2(id,name,registerdayold,times)
values(:new.id,:new.name,v_registerdyaold,v_times);
end afupdate;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧