触发器的使用
触发器什么时候出发呢?
BEFORE:在触发的DML事件发生之前执行触发器体
AFTER:在触发的DML事件发生之后执行触发器体
INSTEAD OF:执行触发器体来代替触发器事件,用于不可修改 的视图中。
一、语句级的触发器
- 触发事件发生一次,触发器体便执行一次。
- 即使没有任何记录受到影响也会触发一次。
1.触发器格式
CREATE [OR REPLACE] TRIGGER trigger_name
timing
event1 [OR event2 OR event3 ]
ON table_name
trigger_body
2.创建一个语句级触发器
判断更新操作是否在忙时('08:00' 到 '18:00')!如果是的话提示错误!
CREATE OR REPLACE TRIGGER secure_emp
BEFORE INSERT OR UPDATE ON emp
BEGIN
IF(T0_CHAR(SYSDATE,'DD') IN ('SAT','SUN')) OR TO_CHAR(SYSDATE,'HH24:MI')
NOT BETWEEN '08:00' AND '18:00'
THEN
RAISE_APPLICATION_ERROR(-20500,'YOU MAY INSERT INTO THE EMP
TABLE ONLY DURING BUSINESS HOURS.');
END IF;
END;
3.判定触发器语句
可以使用一下谓词来确定触发器的语句类型。
UPDATING
INSERTING
DELETING
格式:
...
IF UPDATING THEN
v_stmt:='UPDATE';
ELSIF DELETING THEN
v_stmt:='DELETE'
...
二、记录级的触发器
- 对于每一条被触发事件影响的记录,触发器体便执行一次。
- 如果触发器事件未影响任何记录,触发器将不会执行。
1、创建一个记录级触发器
创建格式:如下
CREATE [OR REPLACE] TRIGGER trigger_name
timing
event1 [OR event2 OR event3 ]
ON table_name
[REFERENCINT OLD AS old | NEW AS new]
FOR EACH ROW
[WHEN (condition)]
trigger_body
具体事例:
CREATE OR REPLACE TRIGGER restrict_salary
BEFORE INSERT OR UPDATE OF sal ON emp
FOR EACH ROW
BEGIN
IF(:NEW.job IN ('CLERK','SALESMAN')) AND :NEW.sal > 5000
THEN
RAISE_APPLICATION_ERROR(-20201,
'EMPLOYEE CANNOT EARN THIS AMOUNT.')
END IF;
END;
三、INSTEAD OF 触发器
创建格式:
CREATE [OR REPLACE] TRIGGER trigger_name
INSTEAD OF
event! [OR event2 OR event3 ]
ON view_name
[REFERENCE OLD AS old | NEW AS new ]
FOR EACH ROW
trigger_body
四、管理触发器
1、禁用或重新启用一个数据库触发器
ALTER TRIGGER trigger_name DISABLE | ENABLE;
2、禁用或重新启用一个表上的所有触发器
ALTER TABLE table_name DISABLE | ENABLE ALL ALL TRIGGERS;
3、重编译一张表上的触发器
ALTER TRIGGER my_trigger COMPILE;
4、删除触发器
DROP TRIGGER trigger_name;
五、数据库触发器
暂无
六、触发器的限制
触发器不能:
执行DDL语句
执行COMMIT,ROLLBACK,SAVEPOINT语句(数据库触发器除外)
查看触发器信息:
包含触发器信息的数据字典:
USER_OBJECTS
USER_TRIGGERS
分享到:
相关推荐
SQL触发器使用实例 --创建触发器,示例1 /* 创建触发器[T_INSERT_卷烟库存表],这个触发器较简单。 说明: 每当[卷烟库存表]发生 INSERT 动作,则引发该触发器。 触发器功能: 强制执行业务规则,保证插入的数据...
mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql...
专用触发器 使用教程 系统详尽的讲解 PDF
oracle触发器使用教程和命名规范
mysql触发器使用实例 看下例子基本上就会操作了!
触发器使用原理和常用T-SQL截取字符串操作,经过实践操作很实用很方便
触发器使用教程和命名规范 1 1,触发器简介 1 2,触发器示例 2 3,触发器语法和功能 3 4,例一:行级触发器之一 4 5,例二:行级触发器之二 4 6,例三:INSTEAD OF触发器 6 7,例四:语句级触发器之一 8 8,...
宇电 AIJK系列三相移相 周波过零可控硅调功触发器使用说明书rar,宇电 AIJK系列三相移相 周波过零可控硅调功触发器使用说明书
SQLServer-触发器使用实例.docx
KCjD触发器使用PPT学习教案.pptx
SQL Server触发器使用方法探析.pdf
宇电AIJK系列三相移相/周波过零可控硅调功触发器使用说明书rar,宇电AIJK系列三相移相/周波过零可控硅调功触发器使用说明书
触发器是与表有关的数据库对象,在对表进行insert/update/delete之前或之后,会触发并执行触发器中定义的SQL语句。触发器的这种特性可以协助应用在数据库端确保数据的完整性,记录日志,校验数据等。
JK03-D三相过零触发器使用说明.pdf
MYSQL触发器,可以使用它用来进行监控,例如商品价格变化,下单后商品库存减少等实用性操作!
WPF触发器使用,几种常用的用法,仅供参考。
SQL触发器的使用方法,SQL触发器的使用方法,SQL触发器的使用方法,SQL触发器的使用方法
关于数据库的视图、索引、存储过程和触发器的使用
MySQL触发器的使用说明,利用函数每秒触发一次...............................................................
:NEW 和:OLD使用方法和意义,new 只出现在insert和update时,old只出现在update和delete时。在insert时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被...