概述
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 子句引用保存行的新旧值的声明过的临时表。这些表的缺省名称是 deleted 和 inserted。
WHEN 子句使触发器仅对搜索条件计算为真值的行触发。
用同一值更新值
只要行中发生更新,BEFORE UPDATE 触发器就会触发,而不论新值是否与旧值不同。AFTER UPDATE 触发器只在新值与旧值不同时才触发。
示例
-
当任命一个新的部门经理时,更新该部门中雇员的 manager_id 列。
CREATE TRIGGER tr_manager BEFORE UPDATE OF dept_head_id ON department REFERENCING OLD AS old_dept NEW AS new_dept FOR EACH ROW BEGIN UPDATE employee SET employee.manager_id=new_dept.dept_head_id WHERE employee.dept_id=old_dept.dept_id END
最后
以上就是愉快大树为你收集整理的行级触发器的全部内容,希望文章能够帮你解决行级触发器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复