网站大量收购闲置独家精品文档,联系QQ:2885784924

教学课件 Oracle数据库应用教程(朱亚兴).ppt

  1. 1、本文档共1254页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
  (3) 进行测试。用如下命令创建一个表drop_me,创建一个视图drop_me_view,然后将这两个对象删除。   SQLcreate table drop_me(a number);   表已创建。   SQLcreate view drop_me_view as select *from drop_me;   视图已建立。   SQLdrop view drop_me_view;   2.语句级触发器和行级触发器   根据触发器所依赖的表对象不同,可将DML触发器进一步分为语句级(statement)和行级(row)触发器。这两类触发器指定了触发器语句执行的频率。若创建触发器的语句中添加了子句for each row,则为行级触发器,否则为语句级触发器。默认是语句级触发器。   语句级触发器是在表或者视图上执行的特定语句(或者语句组)的触发器,能够与INSERT、UPDATE、DELETE及其组合进行关联。无论使用什么样的组合,各个语句触发器都只针对指定语句激活一次。比如,无论UPDATE有多少行,都只会调用一次UPDATE语句触发器。   【例8.3】 创建一个语句级触发器,以对修改表的时间、人员进行日志记录。   (1) 建立实验表。   SQL create table employees_copy as select * from hr.employees;   说明:缺省状态下,HR 用户被锁定,可以通过管理员解除锁定并向其提供口令。在另一用户下做测试时,可以将HR 用户employees的增、删、改的权限暂时授予用户。   (2) 建立日志表。   SQLcreate table employees_log(   ? ? who varchar2(30),   ? ? when date);   (3) 在employees_copy表上建立语句触发器,在触发器中填充employees_log表。   SQL create or replace trigger biud_employee_copy   ? 2 before insert or UPDATE or DELETE   ? 3 on employees_copy    4 begin   ? 5 INSERT into employees_log( who,when)   ? 6 ?values( user, sysdate);    7 end;    /   (4) 测试。   SQLUPDATE employees_copy set salary= salary*1.1;   SQLselect *from employees_log;   (5) 确定是哪个语句起作用,即确定INSERT、UPDATE、DELETE中哪一个触发了触发器。   行级触发器是指被受到影响的各个行激活的触发器,即每行变动一次就触发一次。在触发器内部,我们可以访问正在处理的行的数据。这种访问是通过两个相关的标识符(:?old和?:?new)实现的。?: old和?: new相关标识符在不同的DML语句中代表的值的含义见表8-2。相关标识符是一种特殊的PL/SQL连接变量(bind variable)。该标识符前面的冒号说明它们是使用在嵌套 PL/SQL中的宿主变量意义上的连接变量,而不是一般的PL/SQL变量。referencing子句只是将new 和old重命名为new_value和old_value,目的是避免混淆,比如操作一个名为new的表。 表8-2 : old和?: new相关标识符   【例8.4】 重新修改上述触发器。在上述语句级触发器示例的第(3)步的第3行和第4行之间加一条语句for each row,重新执行第(3)步和第(4)步,观看效果。结果发现语句级触发器在执行过程中每行触发一次。   【例8.5】 创建一行级触发器,为主键生成自增序列号。   (1) 创建一个实验表和一个序列。   SQLdrop table foo;   SQLcreate table foo(id number, data varchar2(20));   SQLcreate sequence foo_seq;   (2) 创建触发器。   SQL create or replace trigger bifer_foo_id_pk    before INSERT on foo    for each row    begin    select foo_seq.nextval into :new.id from dual;    end;   (3) 插入数据进行测试。   SQLINSERT i

文档评论(0)

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

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

版权声明书
用户编号:7201060146000004

1亿VIP精品文档

相关文档