sql server ,oracle中触发器对同一个表进行触发操作。
create or replace trigger update_sys_ins_tasks
before update on sys_inst_tasks
for each row
declare
-- local variables here
finished number;
nowproc VARCHAR2(4000);
begin
finished := :new.finished;
nowproc := :new.nowproc;
if finished = 1 and nowproc <> '完成' then
:new.nowproc := '等待打印';
:new.task_status := 1;
:new.createtime := sysdate;
end if;
end update_sys_ins_tasks;
1、这里所说的同一个表 就是当这个表中有数据更新时 则 更改这个表中的某些字段。。
触发器的名字 update_sys_ins_tasks
数据有更新时要更换数据的表名:sys_inst_tasks
finished number; nowproc VARCHAR2(4000); 这两个为触发器触发的条件。
:new.nowproc := '等待打印'; :new.task_status := 1; :new.createtime := sysdate; 这些为我要更新的内容。
2、这个是当sb_yzrwjlb 表中有数据时,更新 设备基础数据表
update_jcsjb 这个为触发器的名字
sb_yzrwjlb 触发数据的表。
rw 为触发触发数据表 sb_yzrwjlb 中有数据更新或者插入时的字段
设备基础数据表 为当 rw 有数据更新时 更新这个表中的 字段。
这里和上面不一样的就是,这里是对两个表进行的操作,上面是对一个表进行的操作。
create or replace trigger update_jcsjb
after insert or update On sb_yzrwjlb
FOR EACH ROW
BEGIN
if :NEW.rw like '维修%' then
update 设备基础数据表 set 设备基础数据表.使用情况 = '停用' WHERE 设备基础数据表.资产编码 = :NEW.zcbm;
elsif :NEW.rw like '休息%' then
update 设备基础数据表 set 设备基础数据表.使用情况 = '闲置' WHERE 设备基础数据表.资产编码 = :NEW.zcbm;
else
update 设备基础数据表 set 设备基础数据表.使用情况 = '在用-忙' WHERE 设备基础数据表.资产编码 = :NEW.zcbm;
End if;
End;
SQL SERVER 的 根据同一个表中的字段 指定更改为某一字段后,另一个字段也更改。触发器
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER trigger [dbo].[TRI_GZDB_RWHB] on [dbo].[GZDB_RWHB] For update AS BEGIN declare @ZGLD varchar(50), @GUID varchar(50) if update(ZGLD) begin select @ZGLD=ZGLD,@GUID=GUID from INSERTED if @ZGLD = '张国' update GZDB_RWHB set ZYLD='张国' where GUID = @GUID --update GZDB_RWHB set ZYLD='aaa' end end
GZDB_RWHB 为更新字段的表名,
declare @ZGLD varchar(50), 要更新的字段名字
@ZGLD为定义的变量。
@GUID varchar(50) 为
GZDB_RWHB 表的主键。
select @ZGLD=ZGLD,@GUID=GUID from INSERTED 给前面定义的变量
@ZGLD ,
@GUID
赋值。
if @ZGLD = '张国' 判断条件 如果 为'张国'的 话 就更新 zyld 字段 也为 ‘张国’。
update GZDB_RWHB set ZYLD='张国' where GUID =@GUID 根据
GZDB_RWHB 表的主键guid
去更新 zyld 列为 ‘张国’。