- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话: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
您可能关注的文档
- 教学课件 《3G无线网络规划与优化》.ppt
- 教学课件 商务英语写作教程--陈振东.ppt
- 教学课件 现代操作系统与网络服务管理.ppt
- 教学课件 uCOOS-II原理与ARM应用程序设计(张勇).ppt
- 教学课件 MCS-51单片机原理及嵌入式系统应用(王忠飞).ppt
- 教学课件 国际贸易理论与实务(英文版)(第四版).ppt
- 教学课件 个人理财--侯志铭.ppt
- 教学课件 MATLAB 8.X程序设计及典型应用(张霞萍).ppt
- 教学课件 《仓储管理实务》(陈艳).ppt
- 教学课件 英语国家社会习俗(董晓波).ppt
- 2025年江苏省事业单位综合知识与能力素质(经济统计类)模拟试卷.docx
- 影响课件录制时长的因素.pptx
- 2025年教育系统招聘教师通用能力测试题库(含考情适配真题型).docx
- 全民消防安全知识答题线上活动题(附答案).doc
- 挖掘机司机操作证《理论知识》全国统一考试卷(附答案).doc
- 2025年社区工作者招聘考试(公共基础知识+社会工作)综合试卷.docx
- 2025年职业学院招聘工作人员职业素质与能力测试卷.docx
- 窑炉反应工(中级)职业技能《理论知识》真题卷(附答案).doc
- 2025年招聘考试(公共基础知识+职业能力测验+写作)题库.docx
- 知识产权闯关赛题(附答案).doc
文档评论(0)