触发器总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
触发器
触发器的基本概念
触发器是指隐含执行的存储过程。是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。
触发器的语法:
create or replace trigger trigger_name
after/before
insert or update or delete
on table_name
referencing old as old_value new as new_value
for each row /for each statement
begin
代码块;
end ;
语法解析:
1、create or replace创建一个触发器。Replace表示当触发器存在相同的触发器时,替换掉已存在的触发器。
2、after/before 表示触发时机。事件之前执行还是事件之后执行。
3、insert/update/delete触发器监控的事件
4、on table_name 触发器监控的表:table_name
5、for each row 行触发器。每操作一行就触发一次
for each statement语句触发器。针对指定语句激活一次。
6、referencing 设置参照变量,as表示作为。old_value,new_value行变量。分别表示事件发生前/后的数据所在的行。即old_value表示操作前的数据,new_value表示操作后的数据。可以用old_value.字段名、new_value.字段名,调用相应的字段。
触发器的功能
允许/限制对表的操作
自动生成派生列,例如自增字段
强制数据一致性
提供审计和日志管理
防止无效的事务处理
启用复杂的业务逻辑
触发器的组成
1、触发器名称
2、触发语句
3、触发器限制
4、触发操作
Instance:
create trigger biufer_employees_department_id
before insert or update of department_id
on employees
referencing old as old_value new as new_value for each row
when (new_value.department_id<>80 )
begin
:new_mission_pct :=0;
end;
1、触发器名称:create trigger trigger_name
2、触发语句:
before/after insert or update of [Columns Name||department_id]
on [Table Name||employees]
referencing old as old_value new as new_value
for each row
说明:1、表或视图上的DML语句DDL语句数据库关闭或启动,startup shutdown 等等
2、无论是否规定了department_id ,对employees表进行insert的时候都会触发
3、对employees表的department_id列进行update的时候也会触发触发器。
3、触发器限制:
when (new_value.department_id<>80 )限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。
其中的new_value是代表跟新之后的值。
4、触发操作
触发操作是触发器的主体。
begin
:new_mission_pct :=0;
end;
这里主体表示的是将更新后的commission_pct设置为0
5、触发
insert into employees(
employee_id, last_name, first_name, hire_date, job_id, email, department_id, salary, commission_pct)
values(12345,’chen’,’Donny’,syadate,12, ‘donny@’,60,10000,.25);
select commission_pct from employees where employee_id=12345;
触发器在不通知用户的情况下,已经对用户输入的数据值进行修改。
触发器的类型
1、语句触发器
2、行触发器
3、instead of 触发器
4、用户事件触发器
5、系统事件触发器
各种触发器的详解:
1、语句触发器:语句触发器是在表上或者某些情况下的视图上执行的特定语句或者语
句组上的触发器。能够与insert、update、delete或者组合上进行关联。
但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次。比如,无论update多少行,也只会调用一次update语句触发器。
Example One:
1、创建一个实验表
create table example_trigger_student(
stu_no number(6),
stu_name varchar2(20),
stu_age number(3),
stu_sex varchar2(10)
);
2、创建一个自增序列
create sequence example_trigger_stu;
3、创建触发器。触发器名称为biud_student1
create or replace trigger biud_student1
before insert or update or delete on example_trigger_student
begin
--区分大小写。hby与HBY
--if user not in('hby')then
if user not in('HBY')then
--raise_application_error固定语句
raise_application_error(-20001,'you dont hava access to modify this table');
end if;
end;
4、插入数据,触发
insert into example_trigger_student
values(example_trigger_stu.nextval,'Dan',24,'male');
5、查询表里面的内容
select * from example_trigger_student;
Example Two:
1、记录用户时间和用户
create table example_trigger_student_logs(
stu_user varchar2(20),
modify_time date
);
2、创建触发器,将年龄修改为20
create or replace trigger biud_student2