触发器简介
- 触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且,触发器不能接收参数。所以运行触发器就叫触发或点火(firing)。ORACLE事件指的是对数据库的表进行的INSERT、UPDATE及DELETE操作或对视图进行类似的操作。ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等。所以触发器常用来完成由数据库的完整性约束难以完成的复杂业务规则的约束,或用来监视对数据库的各种操作,实现审计的功能。
创建触发器的一般语法
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER }
{INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
ON [schema.]table_name | [schema.]view_name
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
PL/SQL_BLOCK | CALL procedure_name;
案例
CREATE OR REPLACE TRIGGER insert_into_log
BEFORE INSERT --指定触发时机为插入操作前触发
ON scott.emp
FOR EACH ROW --说明创建的是行级触发器
BEGIN
-- :new 和 :old 分别代表新插入的数据和历史数据
-- 将插入前数据插入到日志记录表 log,以供监督使用。
INSERT INTO log (ID, EQUIP_IMEI, OPT_TYPE, OPT_TIME, OPT_RESULT, CREATE_BY_ID, CREATE_TIME, MODIFIED_BY_ID, MODIFY_TIME)
VALUES( :NEW.LOG_ID, :NEW.EQUIP_IMEI, :NEW.OPT_TYPE , :NEW.OPT_TIME,:NEW.OPT_RESULT, :NEW.CREATE_BY_ID, :NEW.CREATE_TIME, :NEW.MODIFIED_BY_ID, :NEW.MODIFY_TIME);
END;