概述
触发器
触发器的触发事件分类:
执行DDM语句;执行DDL语句;引发数据库系统事件;引发用户事件;
创建触发器的语法
CREATE TRIGGER 触发器名
[before|after|instead of] 触发事件
on 表名或者视图名或者用户名或者数据库名
[for each row] [触发条件表达式]
[declare 变量]
begin
sentences;
end 触发器名;
注意:多个触发事件用or连接;
根据触发事件和触发器的执行情况,将Oracle所支持的触发器分为下面5中类型:
行级触发器(引起的触发器只执行一次);
语句级触发器(DML所影响的每一行执行一次触发器);
替换触发器(定义在视图上);
用户事件触发器;
系统事件触发器;
语句级触发器举例,包含条件谓词的使用
条件谓词:inserting,updating,updating('列名'),deleting
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变量引用当前行相关的数据
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;
执行结果:
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登录用户名
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触发器及使用举例(几种触发器类型)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复