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

来源:互联网 发布:中文域名不流行 编辑:程序博客网 时间:2024/06/05 17:33

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_nameBEFRORE|AFTER triggering_event [OF column_name]ON table_name[FOR EACH ROW][WHEN trigger_condition]DECLARE BEGINEXCEPTIONEND [trigger_name];

(1)语句级触发器 与 行级触发器

create or replace trigger tr1after 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

这里写图片描述
这里写图片描述
这里写图片描述