oracle系列4:触发器
一、简介:
触发器是与表直接关联的特殊存储过程,与表的关系密切,用于保护表中的数据。当有操作影响到触发器保护的数据时,触发器将自动执行。
二、触发器的三种类型:
1、DML触发器:当数据库中发生DML事件时(insert,select,update,delete),将调用触发器。
2、替代触发器:也称视图触发器,当视图发生DML事件时,将调用触发器。
3、系统触发器:当数据库发生DDL事件(启动或关闭数据库,create,alter,drop)时,将调用触发器。
三、使用触发器:
1、DML触发器
// 1、创建一个表 create table tableName( id number ); // 2、创建insert的DML触发器 create or replace trigger trigName after insert on tableName for each row declare str char(100):='test'; begin dbms_output.put_line(str); end; // 3、此时向tableName表中插入一条数据,控制台会打印test insert into tableName values(1001);
2、替代(视图)触发器
// 1、创建一个视图 create view viewName as select * from tableName // 2、创建insert的视图触发器 create trigger trigName instead of insert on tableName for each row declare str char(100):='test'; begin dbms_output.put_line(str); end; // 3、此时向viewName视图中插入一条数据,控制台会打印test insert into viewName values(1001);
3、系统触发器
// 1、创建一个表 create table tableName( id number ); // 2、创建系统触发器,当用户删除数据库对象(表、视图)前,控制台打印test create or replace trigger trigName before drop on system.schema declare str char(100):='test'; begin dbms_output.put_line(str); end; // 3、此时删除tableName表,控制台会打印test drop table tableName;
四、启用和禁用触发器:
// 1、启用trigName触发器 alter trigger trigName enable; // 2、禁用trigName触发器 alter trigger trigName disable; // 3、启用tableName表中所有的触发器 alter table<tableName> enable all triggers; // 4、禁用tableName表中所有的触发器 alter table<tableName> disable all triggers; // 5、删除trigName触发器 drop trigger trigName;