您的位置:首页 > 数据库 > Oracle

【Oracle学习】之 触发器(Trigger)

2017-05-28 21:05 435 查看
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





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 数据库 触发器