oracle触发器使用.docVIP

  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文档。上传文档
查看更多
oracle触发器使用

触发器 触发器事件 种类 关键字 含义 DML事件(3种) INSERT 在表或视图中插入数据时触发 UPDATE 修改表或视图中的数据时触发 DELETE 在删除表或视图中的数据时触发 DDL事件(3种) CREATE 在创建新对象时触发 ALTER 修改数据库或数据库对象时触发 DROP 删除对象时触发 数据库事件(5种) STARTUP 数据打开时触发 SHUTDOWN 在使用NORMAL或IMMEDIE选项关闭数据库时触发 LOGON 当用户连接到数据库,建立会话时触发 LOGOFF 当一个会话从数据库中断开时触发 SERVERERROR 发生服务器错误时触发 表9-2 触发器种类 种类 作用 DML触发器 创建在表上,由DML事件引发的触发器 替代触发器 创建在视图上,用来替换对视图进行的插入、删除和修改操作 DDL触发器 定义在模式上,触发事件是数据库对象的创建和修改 数据库事件触发器 定义在整个数据库或模式上,触发事件是数据库事件 DML触发器 CREATE [OR REPLACE] TRIGGER 触发器名 {BEFORE|AFTER|INSTEAD OF} 触发事件1 [OR 触发事件2…] ON 表名 WHEN 触发条件 [FOR EACH ROW] DECLARE 声明部分 BEGIN 主体部分 END; 其中: BEFORE表示先执行触发器代码,然后执行触发语句。AFTER正好相反。 INSTEAD OF表示不执行触发语句,只执行触发器代码。INSTEAD OF触发器只能建在视图上。 WHEN 触发条件,表示当该条件满足时,触发器才能执行 FOR EACH ROW表示触发器为行级触发器,省略则为语句级触发器。 行级触发器表示触发的SQL语句影响的每一行都要触发一次,语句级触发器表示触发的SQL语句只触发一次触发器代码。 例1:创建行级触发器,当对表EMP作删除和更新操作时,显示信息“对EMP表操作成功!”。 CREATE OR REPLACE TRIGGER DML_TRI BEFORE --触发器在触发语句前执行 DELETE OR UPDATE -- 由种事件触发 ON FOR EACH ROW -- 行级触发器 BEGIN END; 测试:CLERK职位的工资增加100 set serveroutput on update emp set sal=sal+100 where job= CLERK; COMMIT; 注意:由于更新会影响三条记录,行级触发器将触发三次 实例改造:把上例修改为语句级触发器。 测试:CLERK职位的工资增加200 可以看到,触发器只执行一次。 练习:创建语句级触发器,当对表dept进行插入操作时,自动显示“记录已经插入”的信息。 实例改造:修改例1的触发器,当修改EMP表的工资时并且修改后的工资比原来多300时,触发器才触发。 CREATE OR REPLACE TRIGGER DML_TRI BEFORE UPDATE of sal --触发事件改为修改SAL字段 ON emp For each row When (new.sal-old.sal300) --触发条件 BEGIN DBMS_OUTPUT.PUT_LINE(对EMP表操作成功!); END; 注意:在行级触发器中,用:new 和:old(称为伪记录),来访问数据变更前后的值。但要注意,INSERT语句插入一条新记录,所以没有:old记录,而DELETE语句删除掉一条已经存在的记录,所以没有:new记录。UPDATE语句既有:old记录,也有:new记录,分别代表修改前后的记录。引用具体的某一列的值的方法是: :old.字段名,或:new.字段名 在WHEN条件中引用new和old不需要加冒号: 测试:给SCOTT工资增加200,触发器没有触发。 给SCOTT工资增加400,触发器触发了。 【训练3】创建触发器CHECK_SAL,对职务为CLERK的雇员的工资修改,当修改的工资超出500至2000范围时,不能进行修改。 步骤1:创建和编译以下触发器: CREATE OR REPLACE TRIGGER CHECK_SAL BEFORE UPDATE ON emp FOR EACH ROW BEGIN IF :old.job=CLERK AND (:new.sal500 OR :new.sal2000) THEN RAISE_APPLICATION_ERROR(-20001, 工资修改超出范围!); END IF; E

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档