加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 14:52:28 所属栏目:百科 来源:网络整理
导读:oracle文档: https://docs.oracle.com/cloud/latest/db112/LNPLS/triggers.htm#LNPLS750 概述: 触发器是一种特殊类型的存储过程,编译后存储在数据库服务器中,当特定事件发生时,由系统自动调用执行,而不能由应用程序显式地调用执行。此外,触发器不接受

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



(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读