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;
原文地址:https://www.cnblogs.com/XueTing/p/13872409.html