节选自:oracle pl/sql编程之八:把触发器说透 文章讲的比较详细。 8.2.6 重新编译触发器 如果在触发器内调用其它函数或过程,当这些函数或过程被删除或修改后,触发器的状态将被标识为无效。 当dml语句激活一个无效触发器时,oracle将重新编译触发器代码,如
节选自:oracle pl/sql编程之八:把触发器说透
文章讲的比较详细。
8.2.6 重新编译触发器
如果在触发器内调用其它函数或过程,当这些函数或过程被删除或修改后,触发器的状态将被标识为无效。
当dml语句激活一个无效触发器时,oracle将重新编译触发器代码,如果编译时发现错误,这将导致dml语句执行失败。
在pl/sql程序中可以调用alter trigger语句重新编译已经创建的触发器,格式为:
alter trigger [schema.] trigger_name compile [ debug]
其中:debug 选项要器编译器生成pl/sql 程序条使其所使用的调试代码。
8.3 删除和使能触发器
删除触发器:
drop trigger trigger_name;
当删除其他用户模式中的触发器名称,需要具有drop any trigger系统权限,
当删除建立在数据库上的触发器时,用户需要具有administer database trigger系统权限。
此外,当删除表或视图时,建立在这些对象上的触发器也随之删除。
禁用或启用触发器
数据库trigger 的状态:
有效状态(enable):当触发事件发生时,处于有效状态的数据库触发器trigger 将被触发。
无效状态(disable):当触发事件发生时,处于无效状态的数据库触发器trigger 将不会被触发,此时就跟没有这个数据库触发器(trigger) 一样。
数据库trigger的这两种状态可以互相转换。格式为:
alter tigger trigger_name [disable | enable ];
--例:alter trigger emp_view_delete disable;
alter trigger语句一次只能改变一个触发器的状态,而alter table语句则一次能够改变与指定表相关的所有触发器的使用状态。格式为:
alter table [schema.]table_name {enable|disable} all triggers;
--例:使表emp 上的所有trigger 失效:
alter table emp disable all triggers;
8.4 触发器和数据字典
相关数据字典:user_triggers、all_triggers、dba_triggers
select trigger_name, trigger_type, triggering_event,
table_owner, base_object_type, referencing_names,
status, action_type
from user_triggers;