/* 分类: 1、DDL触发器 执行create,alter,drop操作时,会激活的触发器 2、DML触发器 执行增、删除、修改时,激活的触发器 3、系统事件触发器 执行特定的系统事件时(启动、加载、登录、退出) 构成: 1、触发事件:会引起触发器执行的操作;DDL操作,DML操作,系统事件; 2、触发时间:before ,after, instead of:替代 3、触发条件:where 条件 4、触发对象:表、视图、数据库对象 5、触发频率:语句级别(表级别):执行一次,行级别:for each row :满足条件的每一行操作都会激活触发器; 6、触发操作:触发器中执行的操作; */ -- 1、语句级别的触发器。(执行一次) -- before触发器 和 after触发器 刚执行语句 触发器跟着执行(1.判断语句是否执行 2.不给语句执行的机会) 和 语句可以先执行后设置的事件 -- 理解:当用户执行某个操作时,会执行我所写的触发器 -- oracle中创建一个触发器 create or replace 关键字trigger + 触发器的名字。 create or replace trigger insertInterceptor after delete on emp -- 定义触发器的时间种类。 xx xx on xx 表名。 declare v_money emp.sal%type; row1 emp%rowtype; cursor c(no emp.deptno%type) is select * from emp where deptno=no; begin insert into emp (empno,ename,job,sal) values(20,'学习','张三',2000); open c(20); loop fetch c into row1; exit when c%notfound; dbms_output.put_line( 'cursor index=='||c%rowcount|| '姓名=='||row1.ename|| '--------工资=='||row1.sal|| '--------工作=='||row1.job ); end loop; close c; end; -- 测试效果:删除20后新填入一个20在emp表中 并输出emp表中对应部门的 相关的 数据 delete from emp where empno=20; --练习 禁止用户在emp中的删除数据 tg01 alter trigger tg01 enable; alter trigger tg01 disable; delete from emp where empno=2; -- 禁止用户在emp中 update数据 create or replace trigger updateMessage before update on emp declare begin raise_application_error(-20010,'禁止用户在emp中 update数据'); --注意oracle错误码 20000--20999; end; --测试 update emp set ename='哈哈' where empno=7788; alter trigger updateMessage disable; -- 2、行级别触发器 for each row :满足条件的每一行操作都会激活触发器; create or replace trigger rowMessage before update or insert on emp for each row declare begin -- 如果条件执行 就给出相应的提示 if updating then dbms_output.put_line('执行了更新的操作'); if:old.sal>:new.sal then -- 逻辑表 raise_application_error(-20002,'禁止给员工降工资!'); end if; elsif inserting then dbms_output.put_line('执行了录入的操作'); end if; end; --关闭触发器 alter trigger updateMessage disable; alter trigger insertInterceptor disable; update emp set sal=sal+1 where deptno=20; commit; insert into emp (empno,ename,sal)values(5,'嘻嘻',500); select * from emp; select sal from emp where deptno=20; -- 删除触发器 drop trigger tg02;