oracle文档: https://docs.oracle.com/cloud/latest/db112/LNPLS/triggers.htm#LNPLS750
概述:
触发器是一种特殊类型的存储过程,编译后存储在数据库服务器中,当特定事件发生时,由系统自动调用执行,而不能由应用程序显式地调用执行。此外,触发器不接受任何参数。触发器主要用于维护那些通过创建表时的声明约束不能实现的复杂的完整性约束,并对数据库中特定事件进行控制和相应。
一、触发器的类型
(1) DML 触发器:
①基于表(TABLE):(有BEFORE、AFTER)
Ⅰ语句级触发器:只触发一次(不可使用new,old缓存)
Ⅱ 行级触发器:每一行(for each row)
②instead of:替代触发器替代数据库视图上的DML操作。
(2) 系统触发器:
①数据库级(Database):
②模式级(Schema):替代触发器替代数据库视图上的DML操作。(DDL、DCL)
二 、DML 触发器操作
//语法
CREATE [OR REPLACE] TRIGGER trigger_name BEFRORE|AFTER triggering_event [OF column_name] ON table_name [FOR EACH ROW] [WHEN trigger_condition] DECLARE BEGIN EXCEPTION END [trigger_name];
(1)语句级触发器 与 行级触发器
create or replace trigger tr1 after delete on test2_student [for each row] begin if (deleting) then DBMS_OUTPUT.PUT_LINE('Deleting');
END IF;
end;
(2)Before 和 After
注意:这两个只能用表,不能用于视图
after :在操作表之后触发(只能读取,不能修改)
before:操作表之前被触发。
(3)缓存:new 和 old