create or replace trigger tri_Sys_Staff --触发器名
After INSERT OR DELETE OR UPDATE ON Sys_Staff -- after (触发时间) 触发事件 on sys_staff 表名
for each ROW -- 循环
-- declare --这里是关键的地方,在变量申明的地方,指定自定义事务处理。
declare pragma autonomous_transaction; -- 格式 * 对于定义成自治事务的Procedure,实际上相当于一段独立运行的程序段,这段程序不依赖于主程序,也不干涉主程序
BEGIN
--修改 部分的逻辑:
--if 修改后的值 != 修改前的值
--if 修改后的值 不等于0, 修改后的值赋值给dept_id
--commit;
--否则修改前的值 = dept_id
--增加修改后的值
IF updating THEN
IF nvl(:new.dept_id,0)!=nvl(:old.Dept_Id,0) -- :new.dept_id* 如果修改后的值不等于修改前的值 前 0 后 15
THEN
IF nvl(:new.dept_id,0)!=0 THEN -- //如果修改后dept_id的值不等于0
UPDATE sys_staff_0806 SET dept_id=:new.dept_id,idcardno=:new.dept_id WHERE staff_id=:old.staff_id; -- // 修改sys_staff_0806 表 当staff_id=:old.staff_id 时,set SET dept_id=:new.dept_id
commit;
ELSE // 否则 为0 dept_id不变 (要么为null,要么为正整数。)
UPDATE sys_staff_0806 SET dept_id=:old.dept_id,idcardno=:old.dept_id WHERE staff_id=:old.staff_id;
commit;
END IF;
END IF;
---- 插入部分完成
ELSIF inserting THEN //新增
INSERT INTO sys_staff_0806 // 新增表
(login_user,staff_id,dept_id,staff_sta,address,birthdate,center_id,dis_order,email,fax,grade_id,home_phone,idcardno,is_developer,mobile_phone,msn,nationality,office_phone,staff_name,staff_type) Values(:new.Login_User,:new.Staff_Id,:new.Dept_Id,:new.Staff_Sta,:new.address,:new.birthdate,:new.center_id,:new.dis_order,:new.email,:new.fax,:new.grade_id,:new.home_phone,:new.idcardno,:new.is_developer,:new.mobile_phone,:new.msn,:new.nationality,:new.office_phone,:new.staff_name,:new.staff_type );
commit;
--- 删除部分
elsif deleting THEN
DELETE sys_staff_0806 WHERE staff_id=:old.Staff_Id;
COMMIT;
END IF;
end;