oracle数据库支持的触发器,oracle数据库PL/SQL之触发器-Oracle

oracle数据库PL/SQL之触发器

七)触发器    www.2cto.com

1.基本概念

两种功能:完成由数据库的完整性约束难以完成的复杂业务规则的约束;监视数据库的各种操作,实现审计功能。

触发器分为:DML触发器(对表或视图执行DML操作时触发),INSTEAD OF触发器(只定义在视图上,替代实际的操作语句),系统触发器(对数据库系统进行操作时触发,如DDL语句、启动或关闭数据库等)

触发事件: 上述触发器中括号内容都是触发事件。

触发条件: WHEN子句

触发对象:包括表、视图、模式、数据库。

触发操作:触发器自动执行的程序。

触发时机:触发器相对操作执行的时间,BEFORE/AFTER

条件谓词:INSERTING(触发器事件为INSERT时为真),UPDATING,DELETING

触发子类型:行触发和语句触发,触发中的new和old表。

2.创建触发器    www.2cto.com

CREATE OR REPLACE TRIGGER

触发条件

触发体

CREATE TRIGGER my_trigger         –定义一个触发器my—trigger

BEFORE INSERT or UPDATE of TID,TNAME on TEACHERS

FOR each row

WHEN(new.TNAME=’David’)   –这一部分是触发条件

DECLARE                           –下面这一部分是触发体

teacher_id TEACHERS.TID%TYPE;

INSERT_EXIST_TEACHER EXCEPTION;

BEGIN

SELECT TID INTO teacher_id

FROM TEACHERS

WHERE TNAME=new.TNAME;

RAISE INSERT_EXIST_TEACHER;

EXCEPTION                 –异常处理也可用在这里

WHEN INSERT_EXIST_TEACHER THEN

INSERT INTO ERROR(TID,ERR)

VALUES(teacher_id,’the teacher already exists!’);

END my triqqer;

3.执行触发器

自动执行

CREATE TRIGGER my_trigger1

AFTER INSERT or UPDATE or DELETE on TEACHERS

FOR each row;

DECLARE

info CHAR(10);

BEGIN

IF inserting THEN   –如果进行插入操作

info:=’INSERT’;

ELSIF updating THEN  –如果进行修改操作

info:=’Update’;

ELSE    –如果进行删除操作

info:=’Delete’;

END IF;

INSERT INTO SQL_INFO VALUES(info); –记录这次操作信息

END my_trigger1;

4.删除触发器

DROP TRIGGER my_trigger;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值