Oracle触发器及使用举例(几种触发器类型)

触发器
触发器的触发事件分类:
执行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;


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







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值