oracle触发器例子(Oracle学习随笔二触发器)
oracle触发器例子(Oracle学习随笔二触发器)1.7.3 可用属性1.2.3 系统事件触发器ORACLE可以在DML语句进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。如insert、update、delete触发器1.2.2 替代instead of触发器由于在ORACLE里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。它就是ORACLE 8后专门为进行视图操作的一种处理方法。
1 触发器(TRIGGER)1.1 什么是触发器
触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且,触发器不能接收参数。所以运行触发器就叫触发或点火(firing)。ORACLE事件指的是对数据库的表进行的INSERT、UPDATE及DELETE操作或对视图进行类似的操作。ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等。所以触发器常用来完成由数据库的完整性约束难以完成的复杂业务规则的约束,或用来监视对数据库的各种操作,实现审计的功能。
1.2 触发器类型
1.2.1 DML触发器
ORACLE可以在DML语句进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。如insert、update、delete触发器
1.2.2 替代instead of触发器
由于在ORACLE里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。它就是ORACLE 8后专门为进行视图操作的一种处理方法。
1.2.3 系统事件触发器
1.7.3 可用属性
除DML语句的列属性外,其余事件属性值可通过调用ORACLE定义的事件属性函数来读取。
1.7.4 样例
--创建触犯发器
CREATE OR REPLACE TRIGGER tr_ddl
AFTER DDL ON SCHEMA
BEGIN
INSERT INTO ddl_event VALUES
(systimestamp ora_sysevent ora_login_user
ora_dict_obj_type ora_dict_obj_name);
END tr_ddl;
ddl_sevent是自定义的表
--创建退出触发器
CREATE OR REPLACE TRIGGER tr_logoff
BEFORE LOGOFF ON DATABASE
BEGIN
INSERT INTO log_event (user_name address logoff_date)
VALUES (ora_login_user ora_client_ip_address systimestamp);
END tr_logoff;
1.8 触发器状态改变
Alter trigger trigger_name [enable|disable|compile]
Drop trigger trigger_name
ALTER TABLE [schema.]table_name {ENABLE|DISABLE} ALL TRIGGERS;