触发器和内置程序包

触发器和内置程序包

ID:31561053

大小:127.00 KB

页数:22页

时间:2019-01-13

触发器和内置程序包_第1页
触发器和内置程序包_第2页
触发器和内置程序包_第3页
触发器和内置程序包_第4页
触发器和内置程序包_第5页
资源描述:

《触发器和内置程序包》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、第十二章触发器和内置程序包一、触发器特定事件出现时自动执行的存储过程,不能直接调用1、创建触发器createorreplacetrigger触发器名{before

2、after

3、insteadof}{insert

4、delete

5、update[of某列[,某列...]]}[or{insert

6、delete

7、update[of某列[,某列...]]}]on[模式.]某表或某视图[referencing{new[as]默认名为new的即将更新的行的新名

8、old[as]默认名为old的更新前的行的新名}][foreachrow][w

9、hen(某条件)][declare声明部分;]begin可执行部分;[exception异常处理部分;]end[触发器名];--在emp表中插入行、或更新deptno列之前,--如果新行的deptno不等于40,就把comm强行改为0,--每行都触发createorreplacetriggeremp_trgbeforeinsertorupdateofdeptnoonempforeachrowwhen(new.deptno<>40)begin:new.comm:=0;endemp_trg;--测试insertintoemp(

10、empno,comm,deptno)values(8888,500,10);selectempno,comm,deptnofromempwhereempno=8888;2、触发器组件(1)触发器时机before、after、insteadof(2)触发器事件导致触发器执行的特定事件:表或视图上的DML之增删改、模式对象上的DDL、实例范围的数据库事件(3)表名如“beforeinsertorupdateofdeptnoonemp”(4)触发器类型,语句级、行级、insteadof、模式、数据库级(5)触发器限制,when子

11、句[when(布尔表达式)],如“when(new.deptno<>40)”(6)触发器主体,触发器操作,PL/SQL块PL/SQL块declare-begin-exception,如“begin:new.comm:=0;end;”只有行级触发器的PL/SQL块中的语句能访问行的列值,如“foreachrow...:new.comm:=0;”--在emp表中更新sal列之后,--如果新行的sal大于旧行的sal,就输出它们的差值,--每行都触发createorreplacetriggeremp_trgafterupdate

12、ofsalonempforeachrowwhen(new.sal-old.sal>0)declarediffnumber;begindiff:=:new.sal-:old.sal;dbms_output.put_line(diff);endemp_trg;--测试updateempsetsal=sal+100whereempno=7788;3、触发器类型(1)行级触发器对DML语句影响的每个行都执行一次的触发器,有foreachrow--创建序列createsequenceseq;--创建触发器createorreplac

13、etriggeremp_trg--如果一个触发器由多种DML语句触发beforeinsertorupdateofempnoonempforeachrowbegin--在触发器主体中用条件谓词inserting、deleting、updating判断ifinsertingthen--用行级触发器给主键插入序列selectseq.nexvalinto:new.empnofromdual;elseraise_application_error(-20001,'不许更新empno');endif;endemp_trg;--测试in

14、sertintoemp(empno)values(0);insertintoemp(empno)values(0);insertintoemp(empno)values(0);selectempnofromemp;--emp删一条,向同结构的表emp_log写一条--创建和emp同结构的空表emp_logcreatetableemp_logasselect*fromempwhere1=2;--创建触发器createorreplacetriggerdelete_trgbeforedeleteonempforeachrowbe

15、gininsertintoemp_log(empno,ename,sal,deptno)values(:old.empno,:old.ename,:old.sal,:old.deptno);end;--测试deleteempwhereempno=7788;select*fromemp_log;rollb

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。