ORACLE触发器
前言
1.什么是触发器(trigger)
触发器:是一种特殊的数据库对象,它可以在特定的事件发生时自动执行一些操作,可以用来实现复杂数据约束,数据验证,数据审计等功能
2.触发器的基本原理
触发器类似于过程函数,其包含声明部分和异常处理部分,并且都有名称、都被存储在数据库中,但与普通的过程函数不同的是,函数需要用户显示的调用才执行,而触发器则是当某些事件发生时,由oracle自动执行,触发器的执行对用户来说是透明的
一.查看所有触发器
1.查看某个表的触发器
select * from all_triggers where table_name='表名';
--trigger_name 触发器名称
--table_name 表名
--owner 所属用户
2.查看触发器详细信息
select * from all_source where type='TRIGGER' AND name='触发器名称';
--text 触发器详细信息
--name 触发器名称
3.查询所有触发器、存储过程、视图、表
--所有触发器 object_name 触发器名称(也可以查user_triggers表)
Select * From user_objects Where object_type='TRIGGER';
--所有存储过程 object_name 存储名称(也可以查user_procedures表)
Select * From user_objects Where object_type='PROCEDURE';
--所有视图 object_name 视图名称(也可以查user_views表)
Select * From user_objects Where object_type='VIEW';
--所有表 object_name 所有表名(也可以查user_tables表)
Select * From user_objects Where object_type='TABLE';
二.创建触发器
1.语法:
create or replace trigger trigger_name --创建触发器,名称为trigger_name
before|after --before事前触发器,after事后触发器
dml操作 on 表 --insert or update or delete on table_name
[for each row]--默认语句级,写上是行级
begin --声明开始
--如果是插入则..删除则..更新则..
--前者锁定某个操作针对表,后者针对不同的dml操作
要执行的语句;
end;--声明结束
2.示例:
CREATE OR REPLACE TRIGGER TRIGGER_NAME
AFTER
INSERT OR UPDATE OR DELETE ON table_name
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
--新增
IF INSERTING THEN
insert into table_name_copy
(
id,
CODE,
NAME)values
(:new.id,
:new.code,
:new.name
);
END IF;
--修改
IF UPDATING THEN
update table_name_copy
set CODE=:new.CODE,
NAME=:new.NAME,
id=:new.id
where pk_supplier = :new.pk_supplier ;
END IF;
---删除
IF DELETING THEN
DELETE FROM table_name_copy where id=:old.id;
END IF;
END;
三.触发器总结
(1).每个触发器都与一个特定的表相关联,并且只有在该表上发生特定的事件(如insert,update,delete)时才会触发
(2).触发器定义包含触发事件、触发时间和触发操作
(3).触发器是存储在数据库中的对象,它们与其他数据库对象一样可以被管理和维护
(4).当与其相关联的表上发生特定事件时,触发器会自动执行,而不需要手动干预
(5).触发器可以在事务中使用,确保数据的一致性和完整性