第六章PL/SQL程序设计.ppt

  1. 1、本文档共107页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三、触发器的组成: ???????????? 1、触发时间:触发器事件的时间次序(before, after) ???????????? 2、触发事件:什么SQL语句会引起触发器触发(insert, delete, update) ???????????? 3、触发子体:触发器触发时要执行的操作(一个完整的PL/SQL程序) ???????????? 4、触发类型:触发器被执行的次数(语句级、行级) 四、创建触发器注意事项: ???????? 1、在触发器中可以调用存储过程;在存储过程中不得调用触发器。 ???????? 2、在触发器中不得使用commit, rollback, savepoint语句。 ?????????3、在触发器中不得间接调用含有commit, rollback, savepoint的语句的存储过程及函数。 五、创建语句级触发器: ?????????语句级触发器: 该触发器在数据库操作时只执行一次。 ?????????说明: ?????????update中的of是可选项,用于指定语句要修改的列 ?????????要创建的触发器已经存在时,使用replace选项 创建触发器的一般语法是: CREATE [ OR REPLACE]TRIGGER 触发器名 [ BEFORE|AFTER ] event ON table_reference [ FOR EACH ROW [WHEN trigger_condition] ] trigger_body; 3.9.2 DML触发器 创建一个行级别触发器,停止用户删除雇员名为SMITH的记录。 create or replace trigger delete_smith before delete on emp for each row when (old.ename=SMITH) begin raise_application_error(-20001,不能删除该条信息!); end; //例2:After型触发器: ?? create or replace trigger insertemp after insert on emp declare v_empcount number(7); begin select count(*) into v_empcount from emp; dbms_output.put_line(目前员工总数达到:||v_empcount||名。); end; 条件谓词: 当在触发器中包含了多个触发事件的组合时,为了分别针对不同的事件进行不同的处理,需要使用oracle提供的如下条件谓词: inserting:当触发事件是insert时,取值为true,否则为false; updating:当触发事件是update时,取值为true,否则为false; deleting:当触发事件是delete时,取值为true,否则为false; 请看下面的案例: create or replace trigger tri_emp before insert or update or delete on emp begin if to_char(sysdate,DY,nls_date_language=AMERICAN) IN (SAT,SUN) then case when inserting then raise_application_error(-20001,不能在休息日增加雇员); when updating then raise_application_error(-20001,不能在休息日更新雇员); when deleting then raise_application_error(-20001,不能在休息日更新雇员); end case; end if; End; 练习: 请创建一个触发器实现:当dept表中的deptno字段发生变化时,emp表中相应的deptno也会发生变化,请编写代码: create or replace trigger update_cascade_emp after update or delete on dept for each row begin update emp set emp.deptno=:new.deptno where emp.deptno=:old.deptno; end; 3.10 小结 PL/SQL程序由三个块组成,包括声明部分、执行部分、异常处理部分。 当编写PL/SQL应用程序时,只能直接嵌入SELECT语句、DML语句和事务控制语句,不能直接嵌入DDL语句和

文档评论(0)

junjun37473 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档