触发器

本文详细解析了数据库触发器的工作原理,包括其与过程、函数的区别,触发器的创建语法,以及BEFORE与AFTER触发器的执行顺序。通过实例展示了表级与行级触发器的使用场景,如限制雇员入职日期与工资调整幅度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

触发器类似于过程和函数,都具有程序主体部分(声明段、可执行段、异常处理段),但是与手工调用过程或函数不同的是,所有触发器都是依靠事件执行的。
DML触发器主要由DML语句进行出发,当用户执行了增加(INSERT)、修改(UPDATE)、DELETE(删除)操作的时候,就会触发操作。
CREATE [OR REPLACE] TRIGGER 触发器名称[BEFORE | AFTER][INSERT | UPDATE | UPDATE OF 列名称 [,列名称,…] | DELETE] ON 表名称[FOR EACH ROW][DISABLE][WHEN 触发条件][DECLARE][程序声明部分 ;]BEGIN程序代码部分 ;END [触发器名称] ;
触发器的执行顺序:
BEFORE表级触发器执行;
BEFORE行级触发器执行;
执行更新操作;
AFTER行级触发器执行;
AFTER表级触发器执行。

建立触发器是在之后进行DML操作时候才能看到作用。

表级触发器
例1
CREATE OR REPLACE TRIGGER forbid_emp_trigger
BEFORE INSERT OR DELETE
ON emp
DECLARE
v_currentdate VARCHAR(20) ;
BEGIN
SELECT TO_CHAR(SYSDATE,‘dd’) INTO v_currentdate FROM dual ;
IF TRIM(v_currentdate)!=‘10’ THEN
RAISE_APPLICATION_ERROR(-20008,‘在每月的10号才允许办理入职手续!’) ;
END IF ;
END ;
/

insert into emp (empno,ename)values(1111,‘zz’);

行级触发器
CREATE OR REPLACE TRIGGER emp_update_trigger
BEFORE UPDATE OF sal
ON emp
FOR EACH ROW
BEGIN
IF ABS((:new.sal-:old.sal)/:old.sal) > 0.1 THEN
RAISE_APPLICATION_ERROR(-20008,‘雇员工资修改幅度太大!’) ;
END IF ;
END;
/

update emp set sal=6000;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值