Oracle触发器

1、什么是触发器:
触发器是在对表进行插入、更新、删除操作时自动执行的存储过程,常用于强制业务规则,是一种高级约束,可以定义比用check约束更为复杂的约束,可以执行复杂的SQL语句。触发器是一种特殊的存储过程,触发器一般由事件触发并且不能接受参数,存储器由语句块去调用。
2、触发器有什么作用
(1)数据备份
当我们需要对业务主表执行数据操作时,可以用触发器对数据进行备份,保证数据的安全性
(2)确保数据一致性
当做数据操作时,可以用触发器通知或者操作相关表
3、触发器分类
(1)DML触发器:DML触发器创建在表上,由DML事件引发
(2)INSTANG OF触发器: 创建在视图上并且只能在行级上触发,用于替代insert,delete等操作(由于oracle中不能直接对有两个以上的表建立的视图进行DML操作,所以给出替代触发器,它是专门为进行视图操作的一种处理方法)
(3)DDL触发器: 触发事件时数据库对象的创建和修改
(4)数据库事件触发器:定义在数据库或者模式上,由数据库事件触发
4、语法
CREATE [OR REPLACE] TIGGER触发器名 触发时间 触发事件
  ON表名/视图名
  [FOR EACH ROW] //加上FOR EACH ROW 即为行级触发器,不加时为语句级触发器
  BEGIN
  pl/sql语句
  END

CREATE OR REPLACE TRIGGER trigger_name
  < before | after | instead of > < insert | update | delete> ON table_name
  [FOR EACH ROW]
  WHEN (condition)
  DECLARE
  BEGIN
  END;
  
INSTEAD OF 触发器语句
CREATE [OR REPLACE] TRIGGER trigger_name
INSTEAD OF
{INSERT|DELETE|UPDATE [OF COLUMN…]}
[OR {INSERT| DELETE| UPDATE [OF COLUMN…]}]
ON VIEW_NAME
[REFFERENCING{OLD [AS] OLD | NEW [AS] NEW| PARENT AS PARENT}]
// 可以指定相关名称,当前的默认相关名称为OLD和NEW,应用相关名称时需要加:
[FOR EACH ROW] //instead of 触发器只能在行级上触发,因为没有必要指定
[WHEN CONDITION]
DECLARE
BEGIN
END;

DML 触发器实例(当表tab1中执行insert操作后就会执行该触发器,插入一条数据)
CREATE OR REPLACE TRIGGER TRIGGER1
AFTER INSERT ON TRIGGERTEST //插入后触发
FOR EACH ROW //行级触发器
BEGIN
INSERT INTO tab1(ID,NAME) VALUES(‘22’,‘33’);
END;
5、使用触发器时应该注意以下几点
(1) 在触发器的执行部分只能用DML语句(SELECT、INSERT、UPDATE、DELETE),不能使用DDL语句 (CREATE、ALTER、DROP)
(2)触发器中不能使用commit语句,触发器的操作与触发事件(INSERT,UPDATE,DELETE)一起进行COMMIT和ROLLBACK;
(3)一个表上的触发器越多,对于表的DML操作性能影响越大
(4) 触发器最大为32K

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值