oracle学习笔记之五(触发器)
触发器:
?
触发器?是?特殊的存储?过程,它当指定的表中的数据?发生变化?时自动?运行:
触发器的执行是由事件触发的,而普通?存储过程是?由命令调用运行的
触发器的组成:触发事件,触发条件,触发操作
触发事件:Insert?
Update
delete
出发时间:Before:在指定的事件发生之前执行触发器
After:在指定的事件发生之前后执行触发器
行触发:对触发事件影响的每一行执行触发器
语句触发:对于触发事件只能触发一次,而且不能访问受触发器影响的每一行的值。
?
需求:
表emp:

?
?
表emp_log:
?
?
?
对雇员表的操作
对日志表的操作
新增员工记录?
把新员工记录同时插入到日志表中,把员工状态改为“入职”?
修改员工的工资?
判断日志表是否有该员工记录,若存在,比较新旧工资,把员工状态对应改为“加薪”或“减薪“,更新工资;若不存在,插入新记录,状态改为”调薪”。?
员工辞职,删除该员工记录?
判断日志表是否有该员工记录,若存在,把员工状态改为“辞职”;若不存在,插入该条记录,把员工状态改为“辞职。
建表:?
drop table EMP cascade constraint;drop table emp_log cascade constraint;prompt=====创建表(EMP)=====;create table EMP( Empid varchar2(20) not null, Empname varchar2(10), Empage number(5), Empsex varchar2(2), Empwage number(10), constraint EMP_Empid_pk primary key(Empid));prompt =====创建表(emp_log)====;create table emp_log( Empid varchar2(20) not null, Empname varchar2(10), Empage number(5), Empsex varchar2(2), Empwage number(10), condition char(10), recdate date , constraint emp_log_Empid_pk primary key(Empid));
?
?
create or replace trigger emp_log_insertafter insert on empfor each row begin if(inserting) then insert into emp_log values(:new.Empid ,:new.Empname ,:new.Empage ,:new.Empsex ,:new.Empwage,'入职',sysdate); end if;end ;/
?
启动触发器:??
alter trigger emp_log_insert enable;
??
?停止触发器:?
?
?
?
Alter trigger emp_log_insert disable ;
?
??删除触发器:?
?
arop trigger emp_log_insert;
?
1 楼 babydeed 2011-07-10 非常好 继续