行级触发器

来源:互联网 发布:怎么购买淘宝店铺 编辑:程序博客网 时间:2024/05/21 21:03

CREATE TRIGGER 语句 [SQL Remote]


说明 

此语句用于在数据库中创建新触发器。它是一种形式的触发器,专门设计用于 SQL Remote。

语法 

CREATE TRIGGER trigger-name trigger-time
trigger-event, ...
ORDER integer ] ON table-name
REFERENCING [ OLD AS old-name ]
   [ NEW AS new-name ] ]
   [ REMOTE AS remote-name ] ]
FOR EACH { ROW | STATEMENT } ]
WHEN ( search-condition ) ]
IF UPDATE ( column-name ) THEN
[ { AND | OR } UPDATE ( column-name ) ] ... ]
   compound-statement
ELSEIF UPDATE ( column-name ) THEN
[ { AND | OR } UPDATE ( column-name ) ] ...
    compound-statement
END IF ] ]

trigger-time:
BEFORE | AFTER | RESOLVE

trigger-event:
DELETE | INSERT | UPDATE
UPDATE OF column-name [, column-name, ...]

参数 

trigger-time    可以定义行级触发器在插入、更新或删除之前 (BEFORE) 或之后 (AFTER) 执行。语句级触发器在语句后 (AFTER) 执行。RESOLVE 触发器时间用于 SQL Remote:它只在行级 UPDATE 或 UPDATE OF 列列表之前触发。

只要行中发生更新,BEFORE UPDATE 触发器就会触发,而不论新值是否与旧值不同。AFTER UPDATE 触发器只在新值与旧值不同时才触发。

触发器事件    触发器可以由以下一个或多个事件触发:

  • DELETE    每当删除关联表中的行时激活。

  • INSERT    每当有新行插入到与触发器关联的表中时激活。

  • UPDATE    每当更新关联表中的行时激活。

  • UPDATE OF column-list    每当更新关联表中的行和修改 column-list 中的列时激活。

用法 

任何地方。

权限 

必须有 RESOURCE 权限和表的 ALTER 权限,或者必须有 DBA 权限。CREATE TRIGGER 在表上放置表锁,因此要求独占使用表。

副作用 

自动提交。

另请参见 
  • UPDATE 语句
说明 

CREATE TRIGGER 语句创建与数据库中的表关联的触发器,并且在数据库中存储触发器。

BEFORE UPDATE 触发器在行上发生更新的任何时候触发,不论新值是否不同于旧值。AFTER UPDATE 触发器仅当新值不同于旧值时才触发。

行级和语句级触发器 

触发器声明为行级触发器(此情况下,它在每行修改之前或之后执行)或语句级触发器(此情况下,它在整个触发器语句完成后执行)。

可以定义行级触发器在插入、更新或删除之前 (BEFORE) 或之后 (AFTER) 执行。语句级触发器在语句后 (AFTER) 执行。RESOLVE 触发器事件用于 SQL Remote:它仅在行级 UPDATE 或 UPDATE OF column-lists 之前触发。

要将触发器声明为行级触发器,请使用 FOR EACH ROW 子句。要将触发器声明为语句级触发器,可以使用 FOR EACH STATEMENT 子句或忽略 FOR EACH 子句。为清楚起见,建议在声明语句级触发器时输入 FOR EACH STATEMENT 子句。

触发顺序 

同时触发(之前、之后或解析)的同类型触发器可以使用 ORDER 子句确定触发器的触发顺序。

引用已删除和插入的值 

REFERENCING OLD 和 REFERENCING NEW 子句允许引用已删除和插入的行。在此子句中,UPDATE 处理为删除后插入。

REFERENCING REMOTE 子句用于 SQL Remote。它允许引用 UPDATE 语句的 VERIFY 子句中的值。它仅能用于 RESOLVE UPDATE 或 RESOLVE UPDATE OF column-list 触发器。

REFERENCING OLD 和 REFERENCING NEW 的含义不同,具体取决于触发器是行级还是语句级触发器。对于行级触发器,REFERENCING OLD 子句允许引用更新或删除之前行中的值,REFERENCING NEW 子句允许引用已插入或更新的值。在 BEFORE 和 AFTER 触发器中可以引用 OLD 和 NEW 行。REFERENCING NEW 子句允许在插入或更新操作发生之前在 BEFORE 触发器中修改新行。

对于语句级触发器,REFERENCING OLD 和 REFERENCING NEW 子句引用保存行的新旧值的声明过的临时表。这些表的缺省名称是 deletedinserted

WHEN 子句使触发器仅对搜索条件计算为真值的行触发。

用同一值更新值 

只要行中发生更新,BEFORE UPDATE 触发器就会触发,而不论新值是否与旧值不同。AFTER UPDATE 触发器只在新值与旧值不同时才触发。

示例 
  • 当任命一个新的部门经理时,更新该部门中雇员的 manager_id 列。

    CREATE TRIGGERtr_manager BEFORE UPDATE OF dept_head_id ON departmentREFERENCING OLD AS old_deptNEW AS new_deptFOR EACH ROWBEGIN   UPDATE employee   SET employee.manager_id=new_dept.dept_head_id   WHERE employee.dept_id=old_dept.dept_idEND
 http://www.ianywhere.com/developer/product_manuals/sqlanywhere/0902/zh/html/dbrfzh9/00000380.htm
原创粉丝点击