如何限制Oracle中没有一个禁用触发器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何限制Oracle中没有一个禁用触发器相关的知识,希望对你有一定的参考价值。

我在插入或更新之前在表上创建触发器。我知道用户可以使用“更改触发器禁用”选项来禁用触发器。我希望任何用户甚至SYS用户限制都禁用特定触发器。我正在使用Oracle Database 11g。

如何实现这个目标?

谢谢

答案

DDL需要一个database触发器:

create or replace trigger trg_ddl before ddl on database
declare
  v_oty          varchar2(75) := ora_dict_obj_type;
  v_evt          varchar2(75) := ora_sysevent;
  v_olu          varchar2(75) := nvl(ora_login_user,'Undetermined Schema');
begin     
  if ( nvl(v_evt,'X--|') = 'ALTER' and nvl(v_oty,'Y-|') = 'TRIGGER' 
                                   and nvl(olu,'Z|--|') not in ('SYS','SYSTEM') ) then 
    raise_application_error( -20900 ,'Forbidden Operation');
  end if; 
end;

以上是关于如何限制Oracle中没有一个禁用触发器的主要内容,如果未能解决你的问题,请参考以下文章

我可以暂时禁用 oracle 存储过程中的触发器吗?

从片段中禁用导航抽屉

可以为当前会话禁用 Oracle 触发器吗?

如何仅在一个事务中禁用 PostgreSQL 触发器?

如何限制 xdebug-profiler 创建的 cachegrind 文件

oracle 中如何删除或修改 触发器?