通过oracle的触发器使一个表某个字段进行改变的时候另一个表的某个字段也会进行相应改变

主要记录方便以后自己学习

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 触发器则只能为行触发器
 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Oracle触发器实现对某个的增删改的监控操作,并记录到另一个中。下面是一个示例代码,您可以参考: ```sql -- 创建监控记录 CREATE TABLE monitor_log ( log_id NUMBER PRIMARY KEY, table_name VARCHAR2(100), operation_type VARCHAR2(10), operation_date DATE ); -- 创建触发器 CREATE OR REPLACE TRIGGER monitor_trigger AFTER INSERT OR UPDATE OR DELETE ON your_table FOR EACH ROW DECLARE v_operation_type VARCHAR2(10); BEGIN IF INSERTING THEN v_operation_type := 'INSERT'; ELSIF UPDATING THEN v_operation_type := 'UPDATE'; ELSIF DELETING THEN v_operation_type := 'DELETE'; END IF; INSERT INTO monitor_log (log_id, table_name, operation_type, operation_date) VALUES (your_sequence.NEXTVAL, 'your_table', v_operation_type, SYSDATE); END; ``` 上述代码中,首先创建了一个监控记录 `monitor_log`,包含了日志ID、名、操作类型和操作日期等字段。然后创建了一个名为 `monitor_trigger` 的触发器,该触发器在每次对 `your_table` 进行插入、更新或删除操作时触发。 在触发器中,根据当前操作的类型(插入、更新或删除),将相应的操作类型值赋给变量 `v_operation_type`。然后使用 `INSERT INTO` 语句将监控记录插入到 `monitor_log` 中,记录了操作类型、名和操作日期等信息。 请将上述代码中的 `your_table` 替换为您要监控的实际名,并根据需要调整监控记录字段和数据类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值