- 1、本文档共1254页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- DeepSeek从入门到精通.pptx VIP
- 2025年湖南省高职单招语文题库及答案 .pdf VIP
- 数据资产入表审计实践的难点与应对研究基于新发展格局视角.pdf VIP
- 2025年新北师大版数学七年级下册全册教案.docx
- 锅炉安装改造维修质量保证手册-符合TSG 07-2019特种设备质量保证管理体系.docx
- 部编数学七年级上册专题1.5新定义问题(压轴题专项讲练)(人教版(解析版)含答案.pdf VIP
- 人教精通版六年级下册英语教案:Unit 5 General RevisionLesson 28.docx
- 三明市卫计局医改汇报课件.ppt
- 2025年中国眼镜行业市场深度分析及发展前景预测报告.docx
- 玉器设计与工艺 制做 79-玛瑙原料的人工处理工艺(1).pptx
文档评论(0)