如何立即删除Oracle中给定DB中的所有触发器?

时间:2011-11-02 13:55:24

标签: oracle triggers

如何删除(删除,删除)给定数据库中的所有触发器。

问题是应用程序需要数据库升级,并且在升级后不会继续执行触发器(suport,drop,create),应用程序升级失败。

3 个答案:

答案 0 :(得分:9)

这将生成如何删除当前架构中所有触发器的命令:

select 'drop trigger ' || trigger_name || ';' stmt from user_triggers;

答案 1 :(得分:3)

您可以使用Oracle系统表创建用于删除触发器的脚本,如下所示:

select 'drop trigger ' || owner || '.' || trigger_name || ';' from all_triggers

请注意,有3个视图包含触发器:

  • all_triggers =您有权知道的所有触发器 (无论它们属于哪种架构)
  • user_triggers =属于您自己架构的触发器
  • dba_triggers = for DBA's

答案 2 :(得分:3)

Google首次点击搜索查询:Drop all triggers - Oracle

BEGIN  
  FOR i in (select trigger_name,owner 
              from dba_triggers 
             where trigger_name like '%_BI%' and owner = 'myTesting' ) LOOP  
    EXECUTE IMMEDIATE 'DROP TRIGGER '||i.owner||'.'||i.trigger_name;  
  END LOOP;  
END;  

如果你真的想要删除数据库中的所有触发器,

BEGIN  
  FOR i in (select trigger_name,owner 
              from dba_triggers ) LOOP  
    EXECUTE IMMEDIATE 'DROP TRIGGER '||i.owner||'.'||i.trigger_name;  
  END LOOP;  
END;