通过oracle的触发器使一个表某个字段进行改变的时候另一个表的某个字段也会进行相应改变
程序员文章站
2022-07-13 14:43:29
...
主要记录方便以后自己学习
ps:调试的逻辑和表结构都比较简陋是为了方便自己理解学习
首先介绍调试的业务逻辑:
1主要涉及两个表一个表用户表sys_user记录了用户信息及用户年龄,另一个表sys_work通过userid关联用户表的userid然后还有一个work字段表示现在的工作状态
2主要就是用触发器在sys_user表用户年龄改变的时候联动改变sys_work表的信息,并进行相关逻辑判断如:
0<=age<5 工作状态为:出生
5<=age<18 工作状态为:读书
18<=age<55 工作状态为工作
.........
直接上表
sys_user表
sys_work 表
触发器代码
CREATE OR REPLACE TRIGGER tr_user_work
BEFORE UPDATE OF age
ON sys_user
FOR EACH ROW
BEGIN
update sys_work set work =
case
when :new.age >= 0 and :new.age < 5 then '出生'
when :new.age >= 5 and :new.age < 18 then '读书'
when :new.age >= 18 and :new.age < 55 then '上班'
when :new.age >= 55 then '退休'
else
work
end
where
userid = :new.userid;
END;
代码注释
CREATE OR REPLACE TRIGGER tr_user_work >>>>>>>>>>>>创建触发器 名称为 tr_user_work
BEFORE UPDATE OF age
ON sys_user >>>>>>>>>>>>>>>>>>.当sys_user表的age字段改变的时候触发
FOR EACH ROW >>>>>>>>>>>>行触发器
BEGIN
update sys_work set work = >>>>>>>>>>>>更新表 sys_work
case
when :new.age >= 0 and :new.age < 5 then '出生'
when :new.age >= 5 and :new.age < 18 then '读书'
when :new.age >= 18 and :new.age < 55 then '上班'
when :new.age >= 55 then '退休'
else work
end
where userid = :new.userid; >>>>>>>>>通过case when then进行判断
更新,一定记得 ;结束
END;
记这次试验一下问题记录:
1搜索触发器的语句(where的搜索条件大小写一定要区分不然查不到)
select * from all_triggers where owner = 'SYSTEM'
2触发器运行成功但修改数据联动却显示失败 查询plsql下图位置看自己触发器是否报错 如果报错进去修改查询原因
3触发器语句编写的时候一定记得 begin 和end 之间的语句要用;结束
4 行触发器的理解:
行触发器:要求当一个DML语句操作影响数据库中的多行数据时,对于其中的每个数据行,只要它们符合触发约束条件,均**一次触发器
语句触发器:将整个语句操作作为触发事件,当它符合约束条件时,**一次触发器
当省略FOR EACH ROW 选项时,BEFORE 和AFTER 触发器为语句触发器,而INSTEAD OF 触发器则只能为行触发器
上一篇: Python(五) 条件语句和循环语句