失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > plsql 触发器介绍 语句级别触发器 行级别触发器。

plsql 触发器介绍 语句级别触发器 行级别触发器。

时间:2018-11-27 04:38:31

相关推荐

plsql  触发器介绍    语句级别触发器 行级别触发器。

/*分类: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 insertInterceptorafter delete on emp -- 定义触发器的时间种类。 xx xx on xx 表名。declarev_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);loopfetch 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 updateMessagebefore update on empdeclarebeginraise_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 rowMessagebefore update or insert on emp for each rowdeclarebegin -- 如果条件执行 就给出相应的提示if updating then dbms_output.put_line('执行了更新的操作');if:old.sal>:new.sal then -- 逻辑表raise_application_error(-20002,'禁止给员工降工资!');end if;elsif inserting thendbms_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;

如果觉得《plsql 触发器介绍 语句级别触发器 行级别触发器。》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。