您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Oracle触发器的使用

2024/5/1 18:37:29发布28次查看
与表或数据库事件联系在一起,当一个触发器事件发生时,定义在表上的触发器被触发执行。系统事件触发器可以在ddl或数据库系统上被
1、定义
触发器:与表或数据库事件联系在一起,当一个触发器事件发生时,定义在表上的触发器被触发执行。
触发器触发次序
1)执行 before语句级触发器;
2)对与受语句影响的每一行:
· 执行 before行级触发器
· 执行 dml语句
· 执行 after行级触发器
3)执行 after语句级触发器
2、dml触发器
触发类型--行级和表级
行级:触发语句处理每一行时,行级别触发器都激发一次。
通过:old访问原始值、:new访问修改后的值,:old和:new只在触发器内部有效。
触发时间--之前和之后
建立一个触发器, 当职工表 emp 表被删除一条记录时,把被删除记录写到职工表删除日志表中去
建立删除日志表
create table emp_his
as select * from emp1 where 1=2;
创建触发器
create or replace trigger del_emp
before delete or update on scott.emp1 for  each row
begin
insert into emp_his(deptno , empno, ename , job ,mgr , sal , comm , hiredate )
values( :old.deptno, :old.empno, :old.ename , :old.job,
:old.mgr, :old.sal, :old.comm, :old.hiredate );
end;
3、instead-of触发器:
instead of选项使oracle激活触发器,而不执行触发事件
instead-of触发器只能定义在视图上,允许修改一个本来无法修改的视图。
可更改视图指:如果对视图的操作都是对基表的修改,并只有一个基表。
不可更改视图反之。
建立测试视图
create or replace view emp_view as
select deptno,count(*) total_employee,sum(sal) total_salary
from emp1 group by deptno;
--select * from user_views;
对视图操作报错
delete from emp_view where deptno=10;
建立替代触发器
create or replace trigger emp_view_delete
instead of delete on emp_view for each row
begin
delete from emp1 where deptno=:old.deptno;
end;
再次执行delete

该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product