我是靠谱客的博主 虚拟书包,这篇文章主要介绍Oracle触发器及使用举例(几种触发器类型),现在分享给大家,希望可以做个参考。

触发器
触发器的触发事件分类:
执行DDM语句;执行DDL语句;引发数据库系统事件;引发用户事件;
创建触发器的语法

复制代码
1
2
3
4
5
6
7
8
CREATE TRIGGER 触发器名 [before|after|instead of] 触发事件 on 表名或者视图名或者用户名或者数据库名 [for each row] [触发条件表达式] [declare 变量] begin sentences; end 触发器名;
注意:多个触发事件用or连接;

根据触发事件和触发器的执行情况,将Oracle所支持的触发器分为下面5中类型:
行级触发器(引起的触发器只执行一次);
语句级触发器(DML所影响的每一行执行一次触发器);
替换触发器(定义在视图上);
用户事件触发器;
系统事件触发器;

语句级触发器举例,包含条件谓词的使用
条件谓词:inserting,updating,updating('列名'),deleting
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
create table employee_log (oper_name varchar2(20), oper_date date ); create or replace trigger tri_emp before insert or update or delete on employees declare var_1 varchar2(20); begin if inserting then var_1:='insert'; elsif updating then var_1:='update'; elsif deleting then var_1:='delete'; elsif updating('SALARY') then var_1:='update_salary'; end if; insert into employee_log values(var_1,sysdate); end tri_emp;

行级触发器使用举例
注意:在sqlplus中可以使用old和new record变量引用当前行相关的数据
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create or replace trigger tri_emp before update on employees for each row begin if :new.salary>:old.salary then dbms_output.put_line(:new.first_name||'工资调高了'); elsif :new.salary<:old.salary then dbms_output.put_line(:new.first_name||'工资调低了'); else dbms_output.put_line(:new.first_name||'工资没有调整'); end if; end tri_emp;
执行结果:
复制代码
1
2
3
4
update employees set salary=salary+200 where employee_id=103; 执行结果 1 行已更新。 Alexander工资调高了
用户事件触发器举例
下面例子使用了几个事件属性
ora_dict_obj_name DDL操作对象名称
ora_dict_obj_type DDL操作对象的类型
ora_sysevent触发器的系统事件名
ora_login_user登录用户名

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create table ddl_oper_emp ( db_obj varchar2(20), db_obj_type varchar2(20), oper_action varchar2(20), oper_user varchar2(20), opre_date date ); create or replace trigger tri_ddl before create or alter or drop on hr.schema begin insert into ddl_oper_emp values(ora_dict_obj_name,ora_dict_obj_type,ora_sysevent,ora_login_user,sysdate); end tri_ddl;


只有努力不会背叛
博文仅供参考,欢迎大家来访。如有错误之处,希望批评指正。







最后

以上就是虚拟书包最近收集整理的关于Oracle触发器及使用举例(几种触发器类型)的全部内容,更多相关Oracle触发器及使用举例(几种触发器类型)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(105)

评论列表共有 0 条评论

立即
投稿
返回
顶部