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 ONset QUOTED_IDENTIFIER ONGOALTER trigger [dbo].[TRI_GZDB_RWHB] on [dbo].[GZDB_RWHB] For update AS BEGINdeclare @ZGLD varchar(50), @GUID varchar(50)if update(ZGLD)beginselect @ZGLD=ZGLD,@GUID=GUID from INSERTED if @ZGLD = '張國'update GZDB_RWHB set ZYLD='張國' where GUID = @GUID--update GZDB_RWHB set ZYLD='aaa'endend
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 列為 ‘張國’。