Welcome 微信登录

首页 / 数据库 / MySQL / Oracle 11g 触发器新增功能

触发器的执行顺序组合触发器启用和禁用触发器触发器的执行顺序Oracle允许超过一个触发器建立相同的时间点,但它从来不保证它们的执行顺序。Oracle 11g触发器语法现在包括FOLLOWS子句保证了触发器的执行顺序在相同时间点。下面的例子创建一张表和两个在相同时间点触发的触发器CREATE TABLE trigger_follows_test (  id          NUMBER,  description VARCHAR2(50)); CREATE OR REPLACE TRIGGER trigger_follows_test_trg_1BEFORE INSERT ON trigger_follows_testFOR EACH ROWBEGIN  DBMS_OUTPUT.put_line("TRIGGER_FOLLOWS_TEST_TRG_1 - Executed");END;/ CREATE OR REPLACE TRIGGER trigger_follows_test_trg_2BEFORE INSERT ON trigger_follows_testFOR EACH ROWBEGIN  DBMS_OUTPUT.put_line("TRIGGER_FOLLOWS_TEST_TRG_2 - Executed");END;/我们插入测试表,触发器的执行顺序没有保证。SQL> SET SERVEROUTPUT ONSQL> INSERT INTO trigger_follows_test VALUES (1, "ONE");TRIGGER_FOLLOWS_TEST_TRG_1 - ExecutedTRIGGER_FOLLOWS_TEST_TRG_2 - Executed 1 row created. SQL> 我们可以指定触发器TRIGGER_FOLLOWS_TEST_TRG_2在TRIGGER_FOLLOWS_TEST_TRG_1之前执行通过重建使用FOLLOWS子句的TRIGGER_FOLLOWS_TEST_TRG_1得触发器。CREATE OR REPLACE TRIGGER trigger_follows_test_trg_1BEFORE INSERT ON trigger_follows_testFOR EACH ROWFOLLOWS trigger_follows_test_trg_2BEGIN  DBMS_OUTPUT.put_line("TRIGGER_FOLLOWS_TEST_TRG_1 - Executed");END;/ 现在TRIGGER_FOLLOWS_TEST_TRG_1总是TRIGGER_FOLLOWS_TEST_TRG_2后面执行SQL> SET SERVEROUTPUT ONSQL> INSERT INTO trigger_follows_test VALUES (2, "TWO");TRIGGER_FOLLOWS_TEST_TRG_2 - ExecutedTRIGGER_FOLLOWS_TEST_TRG_1 - Executed 1 row created. SQL> 删除测试表。DROP TABLE trigger_follows_test; 组合触发器组合触发器允许代码为一个或多个时间点为特定的对象结合起来,单独的时间点可以共享一个全局声明部分,这种状态在试用期间一直保持,一旦语句结束,不管执行成功还是错误,触发器状态将被清理干净。在以前的版本中,该类型功能只能通过定义多个触发器和全局变量在一个单独的包中。组合触发器的动作定义和其他DML触发器相同,此外增加了 COMPOUND TRIGGER 子句。触发器的主体是由一个可选的全局声明部分及一个或多个计时点部分,每个可能包含一个不能维持状态的本地声明。CREATE OR REPLACE TRIGGER <trigger-name>  FOR <trigger-action> ON <table-name>    COMPOUND TRIGGER   -- Global declaration.  g_global_variable VARCHAR2(10);   BEFORE STATEMENT IS  BEGIN    NULL; -- Do something here.  END BEFORE STATEMENT;   BEFORE EACH ROW IS  BEGIN    NULL; -- Do something here.  END BEFORE EACH ROW;   AFTER EACH ROW IS  BEGIN    NULL; -- Do something here.  END AFTER EACH ROW;   AFTER STATEMENT IS  BEGIN    NULL; -- Do something here.  END AFTER STATEMENT; END <trigger-name>;/
  • 1
  • 2
  • 3
  • 下一页
ORA-00600 kcbz_check_objd_typ_3 错误处理Oracle 11g 新特性:只读表(Read-only)相关资讯      Oracle 11g  Oracle 触发器 
  • Oracle 11g导入到10g引起的错误  (11/16/2015 10:55:27)
  • Oracle 11g 导库导不出空表问题  (08/19/2015 19:55:58)
  • Oracle 11g统计信息收集--多列统计  (07/24/2015 10:32:39)
  • Oracle 11gClone安装方法  (08/24/2015 20:25:41)
  • Oracle 11g中和SQL TUNING相关的新  (08/12/2015 11:22:52)
  • Oracle 11g数据泵详解  (07/08/2015 08:29:51)
本文评论 查看全部评论 (0)
表情: 姓名: 字数