一、触发器需要特权
要在模式中创建触发器,需要:•CREATE TRIGGER系统特权
•触发器主体中引用的其他架构中的对象的普通对象特权(SELECT,UPDATE,EXECUTE等)
•与触发器关联的表或视图上的ALTER特权。
触发器主体中的语句使用触发器所有者的特权,而不是执行触发触发器的操作的用户的特权。 下面展示了一个例子。
二、触发器所需的特权示例
用户MOE需要创建以下触发器:
CREATE OR REPLACE TRIGGER upd_tom_emp AFTER UPDATE ON tom.employees BEGIN INSERT INTO mary.log_table VALUES(USER,SYSDATE); sharon.calledproc; END;
Moe需要:
• CREATE TRIGGER
• ALTER on TOM.EMPLOYEES
• INSERT on MARY.LOG_TABLE
• EXECUTE on SHARON.CALLEDPROC.
三、在数据字典中查看触发器
可以在以下数据字典视图中看到触发器信息:
•USER_OBJECTS:对象名称和对象类型(与架构中的所有其他对象类型一样)•USER_TRIGGERS:触发器的详细代码和状态
•USER_ERRORS:触发器的PL / SQL语法错误(编译错误)
使用USER_TRIGGERS
*并非所有列都显示在这里
四、使用USER_TRIGGERS查看触发信息
此示例显示了触发事件,时间,触发器类型,状态以及RESTRICT_SALARY触发器的详细正文代码:
SELECT trigger_name, trigger_type, triggering_event, table_name, status, trigger_body FROM USER_TRIGGERS WHERE trigger_name = 'RESTRICT_SALARY';
改变触发器的状态
禁用或启用数据库触发器:
ALTER TRIGGER trigger_name DISABLE | ENABLE;
禁用或启用表格的所有触发器:
ALTER TABLE table_name DISABLE | ENABLE ALL TRIGGERS;
重新编译表的触发器:
ALTER TRIGGER trigger_name COMPILE;
五、删除触发器
要从数据库中删除触发器,请使用DROP TRIGGER语句:
DROP TRIGGER trigger_name;例:
DROP TRIGGER secure_emp;注意:删除表格时,会删除表格上的所有触发器。