用于禁用oracle触发器的脚本

时间:2013-01-28 02:36:46

标签: sql triggers oracle11g

在此之前,我已经在堆栈中看到了这个post。它说如何列出所有触发器,我要求的是脚本禁用(不删除/删除)所有触发器。

1 个答案:

答案 0 :(得分:2)

有趣的问题。不幸的是我无法在本地测试,但这样的事情可能会起作用。基本上,声明一个CURSOR循环遍历所有触发器(为了我的目的,我正在使用几个TEST触发器进行测试)。然后使用EXECUTE IMMEDIATE执行动态sql。

DECLARE
CURSOR cur_trigger IS
SELECT 'ALTER TRIGGER ' ||
       table_owner ||
       '.' ||
       trigger_name ||
       ' DISABLE' SQLStatement
FROM all_triggers
WHERE trigger_name like '%TEST%';
sqlText cur_trigger%ROWTYPE;

BEGIN
  OPEN cur_trigger;
  LOOP
    FETCH cur_trigger INTO sqlText;
    EXIT WHEN cur_trigger%NOTFOUND;

    EXECUTE IMMEDIATE sqlText.SQLStatement;
  END LOOP;
  CLOSE cur_trigger;
END;

这是SQL Fiddle。它在小提琴中并不完全有效,但我相信这是因为小提琴而不是代码。

祝你好运。