触发Oracle DML类型
Oracle DML类型触发器是Oracle开发期间最常用的触发器和最常用的触发器。它们主要用于触发DML操作,如insert、delete和update操作事件。
DML类型触发器安装触发的事件的前后和数据触发的类型可以分为四类:前置行级触发器、后置行级触发器、前置语句级触发器、后置语句级触发器。
创建DML类型触发器的语法结构如下:
create [ or replace] trigger tr_name(触发器名)
before|after
delete| insert | update [of column1,column2…]
[or delete |insert| update of colum1,colum2…]
on table_name(表名)
[for each row]
[follows tr_name1(其它触发器名)]
[when 条件]
declare
–声明部分
begin
–触发器内容部分
end;
语法解析:
1、or replace :存在同名的触发器就覆盖保存。
2、trigger:创建触发器的关键词。
3、before|after表示是选择的触发器是数据改变之前触发、数据改变之后触发。
4、delete| insert | update:表示触发器触发的事件类型是删除、插入或更新。
5、for each row: 表示行级触发器、不填就是语句级触发器
6、follows :表示触发器的顺序是跟在哪个之后。
7、when 表示触发器语句触发的条件
行级触发器
行级触发器一般用来做数据的校验或者记录数据的操作日志,下面是一个行级触发器的例子:
案例1、利用行级触发器记录更新学生信息表时的操作记录,代码如下:
create or replace trigger tr_stuinfo_update
before update on stuinfo
for each row
begin
–当学生班号发生变化时,
if :new.CLASSNO <> :old.CLASSNO then
–插入操作日志表
insert into oplog
(LOGID, –日志ID
TABLENAME, –表名
COLNAME, –列名
NEWDATA, –改变后数据
OLDDATA, –改变前数据
OPDATE, –操作时间
OPERATOR) –操作人
values
,
'stuinfo',
'classno',
:new.classno,
:old.classno,
sysdate,
'jsq');
end if;
end;
代码解析:
1、这是一个学生信息表(stuinfo)update的前置行级触发器,当修改学生的班号时,会把修改的记录的操作信息记录在日志表(oplog)中。
2、行级触发器通过:new和:old来访问变化之后的数据和变化之前的数据,update类型触发器,新旧数据都可以访问,delete类型触发器,只能访问:old值,insert类型触发器只能访问:new值。
建立好触发器,我们更改一条数据看下效果,代码如下:
update stuinfo t set t.classno = 'C201802' where t.stuid = 'SC201801006';
select * from oplog;
结果如下:
语句级触发器
语句级触发器一般是用来做特定限制语句操作的作用,比如在某一段时间内禁止某一部分语句操作,下面是一个语句级触发器的案例:
案例2、比如今天是12月15号,我就禁止每月的15号禁止操作学生信息表(stuinfo)的插入和删除或修改操作。代码如下:
create or replace trigger tr_stuinfo_sql
before update or insert or delete on stuinfo
begin
–每月15号禁止操作学生信息表
if to_char(sysdate,'dd')='15' then
raise_application_error(-20001,'每月15号不能对学生信息表进行正删改操作!');
end if;
end;
代码解析:
1、DML语句触发器就是行级触发器省略掉for each row的写法。
2、raise_application_error是主动给客户端抛出-20001代码错误的信息。
建立好触发器,我们更新一条数据看下效果,结果如下:
总结:
同一个对象上可以有多个DML触发器,但是触发器触发的时候有先后顺序,比如before型触发器比after型触发器先触发,在此基础上行级触发器,比语句级触发器更早触发。同类型的触发器的先后顺序就按follows关键词+触发器名进行排序。
1.文章《『dml触发器如何定义』下列不属于DML触发器类型的是》援引自互联网,为网友投稿收集整理,仅供学习和研究使用,内容仅代表作者本人观点,与本网站无关,侵删请点击页脚联系方式。
2.文章《『dml触发器如何定义』下列不属于DML触发器类型的是》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
相关推荐
- . 现代买票为什么带上携程保险
- . 潮阳怎么去广州南站
- . 湖南马拉河怎么样
- . 烧纸为什么到三岔路口
- . 百色为什么这么热
- . 神州租车怎么样
- . 芜湖方特哪个适合儿童
- . 护肤品保养液是什么类目
- . 早晚的护肤保养有哪些项目
- . 女孩护肤品怎么保养的最好