- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * RAISE_APPLICATlON_ERROR 可以使用内置函数RAISE_APPLICATlON_ERROR创建自己的错误消息,这可能要比已命名的异常情态更具说明性。用户定义消息从块中传递到调用环境中的方式和Oracle错误是一样的。 RAISE_APPLICATlON_ERROR的语法如下: RAISE_APPLICATlON_ERROR (ErrorNumber,ErrorMessage,[keep_errors]) RAISE_APPLICATlON_ERROR 这里ErrNumber是从-20,000到-20,999之间的参数,ErrorMessage是与此错误相关的正文,而keep_errors是一个布尔值。ErrorMessage必须是不多于512个字节。布尔值参数keep_errors是可选曲。如果keep_errors是TRUE,那么新的错误将被添加到已经引发的错误列表中(如果有的话)。如果它是FALSE(这是缺省的设置),那么新的错误将替换错误的当前列表。 1、修改STUDENT表数据时,限制不能修改学生的系别(不能修改CS系学生的系别)。 2、插入课程时,课程号以‘S’开头的课程的学分不能低于3分。 3、不能删除90分以上学生的选课信息。 触发器课堂练习 2 create or replace trigger tri_student_update before update of sdept on student for each row when (old.sdept=‘CS’) --old前没有“:” begin raise_application_error(-20000,不能修改CS系学生的系别!); end; 触发器实例 小结 触发器是一种特殊的过程,他不能被显式的调用,而是自动触发 有三类触发器:分别为插入触发器,删除触发器和修改触发器;对于视图有INSTEAD OF触发器。 触发器分为行级触发器和语句级触发器 变化表不能在行级触发器中读或写 触发器中可以自行抛出异常,使用的语句为: RAISE_APPLICATlON_ERROR 插入Student表中数据时,CS系学生的年龄不能大于30岁。 当修改Student表中的年龄字段时,使其只能增加,不能减少。 删除Student表中的学生信息时,判断在SC表中该学生的平均成绩是否高于60,若高于60,则不能删除,否则允许删除,同时删除SC表该学生对应的选课信息。 练习 1 在Student表中添加列:sum_Grade(总成绩),avg_grade(平均成绩)。 在SC表中作一触发器,当添加,删除或修改一行之后,将该学生在Student表中的总成绩和平均成绩相应改变。 练习 2 插入或修改(修改课程号时)选课信息时,若该课程的选课人数已满,则不允许操作,并抛出相应的错误提示。 练习 3 * * * * * * * * * * * * * * * * * * * * * * * * Oracle数据库技术 触发器 教学目标 掌握触发器的概念 掌握触发器的定义和使用方法 了解在触发器中如何抛出用户自定义异常信息 重点及难点 触发器定义 触发器应用(难点) 触发器 触发器类似于过程或函数,因为它们都是拥有声明、执行和异常处理过程的带名PL/SQL块。与包类似,触发器必须存储在数据库中并且不能被块进行本地化声明。但是,对于过程而言.可以从另一个块中通过过程调用显式地执行一个过程。同时在调用时可以传递参数。对于触发器而言,当触发事件发生时就会显式地执行该触发器。并且触发器不接受参数。执行触发器的操作就是“点火” (firing)触发器。触发器事件是在数据库表上执行的DML(INSERT、UPDATE或DELETE)操作。 触发器 可以使用触发器做许多事情,包括 1。维护不可能在表创建时刻通过声明性约束进行的复杂的完整性约束限制。 2。通过记录所进行的修改以及谁进行了修改来审计表中的信息。 3。当表被修改的时候,自动给其他需要执行操作的程序发信号。 触发器 触发器不可缺少的部件是触发器名、触发事件和触发器主体。 1.触发器名 触发器名的名字空间不同于其他子程序的名字空间。“名字空间” 是可以用作对象名字的合法标识符的集合。过程、包和表的名字空间相同。这就是说,为过程和包赋予相同的名字将是非法的。 但是,触发器却使用的是单独的名字空间。这意味着触发器可以使用和表或过程相同的名字。但是,在一个数据模式中,一个名字仅能用于一个触发器。 触发器 触发器事件决定了触发器的类型。触发器可以按照INSERT、UPDATE或DELETE操
文档评论(0)