【问题标题】:Script to disable an oracle trigger禁用 oracle 触发器的脚本
【发布时间】:2013-01-28 02:36:46
【问题描述】:

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

【问题讨论】:

    标签: sql triggers oracle11g


    【解决方案1】:

    有趣的问题。不幸的是,我无法在本地对此进行测试,但这样的事情可能会奏效。基本上,声明一个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。它在 Fiddle 中不能完全工作,但我相信这是因为 Fiddle 而不是代码。

    祝你好运。

    【讨论】:

    • 谢谢你的回复,但是先生,我真的没有光标的背景,你有什么简单的更新脚本之类的吗?
    • 没有更新脚本@Blackhat,您必须这样做或运行给定的 SELECT 并在执行之前复制并粘贴结果。
    • 我明白了,这意味着我必须手动处理它。一一对吧?
    • 感谢您分享SQL Findle。该工具非常有用。
    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 2011-04-14
    • 2018-03-20
    • 1970-01-01
    相关资源
    最近更新 更多