Oracle复习分析和总结.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
行级别触发器中的相关标识符 行级别触发器:触发语句处理每一行时,行级别触发器都执行一次 CREATE OR REPLACE TRIGGER 触发器名 [AFTER/BEFORE] INSERT OR DELETE OR UPDATEOF 字段名 ON 表名 [WHEN trigger_condition] [FOR EACH ROW] DECLARE … … END 触发器名 [练习]不管 UPDATE 命令涉及多少条记录,以下触发器只触发一次CREATE OR REPLACE TRIGGER TgOnStudents AFTER UPDATE ON STUDENTS DECLARE BEGIN Insert into log_table (info) values (‘TgOnStudents 基于 STUDENTS 表,每次触发代码只执行一次。’); END; 执行以下命令查看效果 UPDATE STUDENTS SET CURRENT_CREDITS = 4 WHERE ID = 10000; UPDATE STUDENTS SET CURRENT_CREDITS = 4 WHERE ID 10006; [练习]以下触发器,UPDATE 涉及多少条记录,代码就执行多少遍CREATE OR REPLACE TRIGGER TgOnRoom AFTER UPDATE ON ROOMS FOR EACH ROW DECLARE BEGIN Insert into log_table (info) values (‘TgOnRoom 基于 STUDENTS 表,UPDATE 涉及几条记 录就执行几遍’); END; 执行以下命令查看效果 UPDATE ROOMS SET NUMBER_SEATS = 100 WHERE ROOM_ID = 20000; UPDATE ROOMS SET NUMBER_SEATS = 100 WHERE ROOM_ID 20005; 行级别触发器:触发语句处理每一行时,行级别触发器都执行一次,在触发器内部,你可以访问当前被处理行中的数据。:old 和 :new 其类型均为 triggering_table%ROWTYPE; 通过 :new.field 来引用指定字段的值(其作用相当于索引中的游标变量)。 触发语句INSERT UPDATE DELETE :old 未定义,所有字段都为 NULL 更新前行的原始值 行被删除前的原始值 :new 当语句完成时,将要被插入的值当语句完成时,将要被更新的值未定义,所有字段都为 NULL ※WHEN 子句 可以通过设置 WHEN 子句来控制行级别触发器的执行,即并不是对于每次更改都触发,只有满足条件的更改动作才触发,主要是在WHEN 里面对:new 或:old 各字段的值进行判断。 WHEN 子句和 FOR EACH ROW 子句的作用:对于影响到的每一行,如果满足WHEN 的要求则执行一遍触发器代码。 [例子]当对 students 表的 current_credits 字段进行修改之前,如果该字段新的值超过 20 分, 写提示信息。 CREATE OR REPLACE TRIGGER CheckCredits BEFORE INSERT OR UPDATEOF current_credits ON students FOR EACH ROW WHEN (new.current_credits20) BEGIN DBMS_OUTPUT.PUT_LINE(‘该生新的学分数为’|| :new.current_credits || ’,超过 20 分 了’); END; 修改 students 表 ID 为 10000 的学生的 current_credits 的值,改为 21。update students set current_credits = 21 where ID=10000; 注意:在 WHEN 子句中使用 new 不要加: ,在 BEGIN 部分中使用时要加: 即为:new [练习] 建触发器 CheckSeatsNumber 当对 rooms 表的 number_seats 字段进行修改之前 (INSERT 或 UPDATE),如果其职大于 300,显示提示信息,***楼宇***号房间座位数是***,是不是输入错误?写触发器,执行下列命令: update rooms set number_seats=301 where room_id=20000; 看看效果。 。 ※ 从:old 和 :new 中获取修改前后的值,存入备份信息表中。 [例子]记录 registered_students 表的每一次修改,将信息记入 RS_audit

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

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

认证主体阳新县融易互联网技术工作室
IP属地境外
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档