概述
(trigger)触发器的定义和作用
- 博客分类:
- Oracle
SQL
C
C++
C#
F#
第一:触发器(trigger)
触发器(trigger)是指隐含执行的存储过程procedure,当定义触发器时必须要指定触发事件和触发的操作,通常触发事件包括insert,update,delete语句,触发器实际上就是一个pl/sql(procedure language/Structured Query Language).create trigger来创建触发器;
第二:触发器的作用;
a.允许/限制对表的修改
b.自动派生列,如自增字段
c.强制数据的一致性
d.提供审计和日志记录
e.防止无效的事务处理
f.启动复杂的业务逻辑
第三:触发器的语法;
Sql代码
- create or replace trigger temp_trigger ---定义一个触发器 temp_trigger
- after|before|instead of ---指定触发时机和触发类型
- insert|update|delete ---指定触发事件
- of columns_name on table_name ---of & on 监控的表单和表列
- referencing
- old as old_value
- new as new_value
- for each row|for each statement ---指定触发次数(行和语句)
- begin
- codes
- end;
instead of 是一种单独的出发机制,用来管理和执行view类型的数据表单
of &on 监控关键字 of 可以省区,on是必须留下的
第四:例子instance
a:创建一个行触发器 tri
Sql代码
- create or replace trigger tri ---trigger tri
- before insert or update on employee
- referencing old as old_value
- new as new_value
- for each row
- when(new_value.empid<>'14') ---当插入的empid不等于14
- begin
- :new_value.salary:=2001; ---将插入的的salary更改成2001
- end;
触发事件:
Sql代码
- insert into employee values(emp_seq.nextval,'Janney',10,'1'); ---插入一条数据
- update employee set employee.empname='Alex' where employee.empid='12'; --根新empid=15的数据
结果:
分析:
对比发现,无论你修改或增加数据只要empid!=14,salary都固定在2001。
b:创建一个语句触发器
创建一表单 idiot
Sql代码
- create table idiot(
- i_id varchar2(255) primary key,
- i_name varchar2(255),
- i_add varchar2(255)
- )
创建触发器 tri_idiot
Sql代码
- create or replace trigger tri_idiot
- before update or insert on idiot
- begin
- if user not in ('hjd') then
- Raise_application_error(-20001,'You don’t have access to modify this table.');
- end if;
- end;
触发事件
Sql代码
- insert into idiot values(idi_seq.nextval,'daniel','武汉');
- insert into idiot values(idi_seq.nextval,'justin','武汉');
- insert into idiot values(idi_seq.nextval,'alex','南昌');
结果:
(在非hjd的用户下执行)
此处的trigger是控制权限的
c:创建一个触发器log修改操作人员和时间和行为
Sql代码
- ---复制一张表格 命名为tem_employee 为操作的表格--
- create table tem_employee as select * from employee
Sql代码
- --创建一张 tem_employee_log记录变化--
- create table tem_employee_log(
- l_who varchar2(50),
- l_when date
- )
Sql代码
- ---增加一column---
- alter table tem_employee_log add(action varchar2(20));
创建触发器 tri
Sql代码
- create or replace trigger tri
- before insert or update or delate on temp_employee
- declare -----声明一变量
- l_action tem_employee_log.action%type;
- begin
- if inserting then l_action:='insert';
- elsif updating then l_action:='update'; --此处用elsif
- elsif deleting then l_action:='delete';
- else raise_application_error(-20001,'You should never ever get this error.');
- end if;
- insert into tem_employee_log values(user,sysdate,l_action);
- end;
触发语句
Sql代码
- delete from tem_employee where tem_employee.empid='4';
结果:
来源: http://danielhjd.iteye.com/blog/1058341
最后
以上就是想人陪咖啡豆为你收集整理的(trigger)触发器的定义和作用的全部内容,希望文章能够帮你解决(trigger)触发器的定义和作用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复