Oracle 12c中如何检查指定触发器的启用/禁用状态?
如何在Oracle 12c中检查触发器的启用/禁用状态
嘿,我之前也碰到过这个坑!你说得太对了,ALL_OBJECTS里的STATUS只能告诉你触发器的编译是否有效(VALID/INVALID),完全没法反映它的启用或禁用状态。要搞定这个,得用Oracle专门为触发器准备的视图:
用
ALL_TRIGGERS视图精准查询状态
这个视图里的STATUS字段就是专门标记触发器启用/禁用状态的,取值只有ENABLED或者DISABLED。直接跑下面的SQL就能得到你要的结果:SELECT TRIGGER_NAME, STATUS FROM ALL_TRIGGERS WHERE TRIGGER_NAME = 'THE_TRIGGER_NAME';小提醒:Oracle默认会把对象名转成大写存储,要是你创建触发器时用双引号指定了大小写敏感的名称,那查询时也得带上双引号,比如
WHERE TRIGGER_NAME = "MySpecialTrigger"。查当前用户的触发器?用
USER_TRIGGERS更省心
如果你要查的是当前登录用户名下的触发器,USER_TRIGGERS视图不需要额外权限,用起来更顺畅:SELECT TRIGGER_NAME, STATUS FROM USER_TRIGGERS WHERE TRIGGER_NAME = 'THE_TRIGGER_NAME';
最后补个小知识点:别把ALL_OBJECTS的STATUS和触发器启用状态搞混——一个触发器可能编译完全有效(ALL_OBJECTS.STATUS = 'VALID'),但被手动禁用了(ALL_TRIGGERS.STATUS = 'DISABLED'),这俩状态是完全独立的哦。
内容的提问来源于stack exchange,提问作者Rushikumar




