怎样创建触发器

2025-03-01 23:36:48
推荐回答(5个)
回答1:

最基本的触发器是针对表的Insert、Update、Delete这三种操作来的。触发器可以建立在表上,也可以建立在视图上。建立在表上的触发器会在表内容发生改变时触发。建立在视图上的触发器会在视图内容改变时触发。注意,视图触发器仅会在明确对视图进行操作的SQL语句执行时才会触发,当基本表的内容发生改变而引起视图内容变化时,不会触发视图触发器。

下面是建立表触发器的代码:
create or replace trigger tg_E_CONTACT
before update or insert or delete on E_CONTACT
for each row
begin
if inserting then
insert into E_CONTACT@gaac.world
values
(:new.TELEPHONE, :new.EMPLOYEEID, :new.STATUS);
else
if updating then
update E_CONTACT@gaac.world s
set s.TELEPHONE = :new.TELEPHONE,
s.EMPLOYEEID = :new.EMPLOYEEID,
s.STATUS = :new.STATUS
where s.employeeid = :old.employeeid;
else
if deleting then
delete from E_CONTACT@gaac.world s
where s.employeeid = :old.employeeid;
end if;
end if;
end if;
end;
下面是建立视图触发器的代码:(注意里面的instead of)
create or replace trigger tg_E_CONTACT
before instead of update or instead of insert or instead of delete on E_CONTACT
for each row
begin
if inserting then
insert into E_CONTACT@gaac.world
values
(:new.TELEPHONE, :new.EMPLOYEEID, :new.STATUS);
else
if updating then
update E_CONTACT@gaac.world s
set s.TELEPHONE = :new.TELEPHONE,
s.EMPLOYEEID = :new.EMPLOYEEID,
s.STATUS = :new.STATUS
where s.employeeid = :old.employeeid;
else
if deleting then
delete from E_CONTACT@gaac.world s
where s.employeeid = :old.employeeid;
end if;
end if;
end if;
end;

回答2:

楼主,你还缺少一个条件,就是这两张表的关联字段,
我这里设定的是字段stu_id与b_id相关联,
把他转换成你自己的关系连接就可以,以下脚本通过测试,你可以直接使用,

--创建测试表
create table student
(stu_id int,
libraryCardNo varchar(10))
create table borrowbook
(b_id int,
libraryCardNo varchar(10))
GO

--插入测试数据
insert student
select 1,'221'
insert borrowbook
select 1,'221'

GO
--创建触发器
create trigger stu_trg
on student
for update
as

declare @a varchar(100),@b varchar(100)
select @a=libraryCardNo ,@b=stu_id from inserted

update borrowbook set libraryCardNo=@a where b_id=@b

GO
--*********测试结果---------------
--更改数据
update student set libraryCardNo='999' where stu_id=1
--结果对比
select * from student
select * from borrowbook

回答3:

create trigger stu_trg
on student
for update
as
IF(UPDATE([libraryCardNo]))--如果更新了libraryCardNo字段
BEGIN
BEGIN TRAN
update borrowbook set libraryCardNo=inserted.libraryCardNo

IF(@@error <> 0)--如果更新不成功则回滚
BEGIN
ROLLBACK TRAN
END

ELSE
COMMIT TRAN
END
END

回答4:

《金缕衣》:劝君莫惜金缕衣,劝君惜取少年时。有花堪折只须折,莫等无花空折枝。

回答5:

Trigger