Oracle触发器

Oracle触发器是使用者对Oracle数据库的对象做特定的操作时,触发的一段PL/SQL程序代码,叫做触发器。触发的事件包括对表的DML操作,用户的DDL操作以及数据库事件等。


触发器的作用

Oracle触发器可以根据不同的数据库事件进行特定的调用触发器程序块,因此,它可以帮助开发者完成一些PL/SQL存储过程完成不了的问题,比如操作日志的记录、防止一些无效的操作、校验数据的正确性、限制一些对数据库对象的操作、提供数据同步的可行性。但是不推荐在触发器当中写业务逻辑程序,因为这样对后期数据的维护将大大提高成本。


触发器的类型

触发器按照用户具体的操作事件的类型,可以分为5种触发器。大致如下:

  • 1、数据操作(DML)触发器:此触发器是定义在Oracle表上的,当对表执行insert、update、delete操作时可以触发该触发器。如果按照对表中行级数据进行触发或语句级触发,又可以分为行级(row)触发器,语句级触发器,按照修改数据的前后触发触发器,又可以分为 after 触发器和before触发器之分。

  • 2、数据定义操作(DDL)触发器:当对数据库对象进行create、alter、drop操作时,触发触发器进行一些操作记录保存、或者限定操作。

  • 3、用户和系统事件触发器:该类型的触发器是作用在Oracle数据库系统上,当进行数据库事件时,触发触发器,一般用来记录登录的相关信息。

  • 4、INSTEAD OF 触发器:此类型的触发器是作用在视图上,当用户对视图进行操作时,触发该触发器把相关的操作转换为对表进行操作。

  • 5、复合触发器:指的是对数据操作(DML)触发器当中的多种类型触发器进行复合,比如;一个触发器当中包含着after(或before)的行级触发器和after(或before)的语句级触发器,来完成一些更为复杂的操作。


案例1、创建一个简单的触发器来校验学生基本信息的正确性,代码如下:

create or replace trigger tr_xsjbxx_insert
  before insert on stuinfo
  for each row
begin
  --对性别的数据进行校验
  if :new.SEX not in ('1', '2') then
    raise_application_error(-20001, '性别错误,请正确选择。');
  end if;
end;

insert into STUINFO
  (STUID,
   STUNAME,
   SEX,
   AGE,
   CLASSNO,
   STUADDRESS,
   GRADE,
   ENROLDATE,
   IDNUMBER)
values
  ('SC201801006',
   '张三丰',
   '3',
   26,
   'C201801',
   '福建省厦门市XXX号',
   '2018',
   to_date('01-09-2018', 'dd-mm-yyyy'),
   '3503021992XXXXXXXX');

结果如下:

Oracle触发器

代码解析:这是一个DML触发器,是对学生信息表(stuinfo)学生数据插入(insert)之前做的一个性别的校验,当性别的值不符合规范的时候报数据错误。