您可以将触发器设置为在用户对列数据执行操作(触发触发器)时禁用触发器的操作。通过使用包含预定义连接变量的过程,仍可触发触发器以及执行其操作。然后,即使在触发触发器的情况下,用户也可以对列进行 INSERT、ALTER 或 DELETE 操作,而不执行触发器操作。
如果您使用行级别触发器,则可使用 WHEN 子句来指定触发器的触发时间。
本示例根据是否存在连接变量来禁用触发器的操作。
创建一个插入后触发器,用于检查连接变量的状态,以确定触发器逻辑是否已启用。如果不存在连接变量,则启用触发器的操作:
CREATE TRIGGER myTrig AFTER INSERT REFERENCING NEW AS new-name FOR EACH STATEMENT BEGIN DECLARE @execute_trigger integer; IF varexists('enable_trigger_logic') = 1 THEN SET @execute_trigger = enable_trigger_logic; ELSE SET @execute_trigger = 1; END IF; IF @execute_trigger = 1 THEN ... -your-trigger-logic END IF; END; |
将以下代码添加到您的语句中,以调用在第 1 步中创建的触发器。该语句使用连接变量来控制触发器的禁用时间,并且必须包含要禁用的代码。
...
IF varexists('enable_trigger_logic') = 0 THEN
CREATE VARIABLE enable_trigger_logic INT;
END IF;
SET enable_trigger_logic = 0;
... execute-your-code-that-you-do-not-want-triggers-to-run
SET enable_trigger_logic = 1;
... now-your-trigger-logic-will-do-its-work |
本示例使用示例 1 中的连接变量方法来控制多个触发器的操作。本示例将创建两个可用于启用和禁用多个触发器的过程。此外,还会创建一个函数,用于检查触发器操作是否已启用。
创建一个可用于禁用触发器操作的过程。该过程的行为取决于连接变量的值。
CREATE PROCEDURE sp_disable_triggers() BEGIN IF VAREXISTS ('enable_trigger_logic') = 0 THEN CREATE VARIABLE enable_trigger_logic INT; END IF; SET enable_trigger_logic = 0; END; |
创建一个可用于启用触发器操作的过程。该过程的行为取决于连接变量的值。
CREATE PROCEDURE sp_enable_triggers() BEGIN IF VAREXISTS ('enable_trigger_logic') = 0 THEN CREATE VARIABLE enable_trigger_logic INT; END IF; SET enable_trigger_logic = 1; END; |
创建一个可用于确定触发器操作是否已启用的函数:
CREATE FUNCTION f_are_triggers_enabled() RETURNS INT BEGIN IF VAREXISTS ('enable_trigger_logic') = 1 THEN RETURN enable_trigger_logic; ELSE RETURN 1; END IF; END; |
向用于控制触发器操作的执行时间的触发器添加 IF 子句:
IF f_are_triggers_enabled() = 1 THEN ... your-trigger-logic END IF; |
调用在第 2 步中创建的过程来启用触发器操作:
CALL sp_enable_triggers(); ... execute-code-where-trigger-logic-runs |
调用在第 1 步中创建的过程来禁用触发器操作:
CALL sp_disable_triggers(); ... execute-your-code-where-trigger-logic-is-disabled |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |