查看触发器源码

可以通过DBA_TRIGGERSALL_TRIGGERSUSER_TRIGGERS视图查看触发器相关信息,也可以通过PL/SQL DEVELOPER等可视化工具查看。

删除和禁用触发器

如果不在需要触发器可以使用 DROP TRIGGER删除触发器:
DROP TRIGGER trigger_name;

如果只是暂时地禁用触发器的执行,可以使用ALTER TRIGGER

ALTER TRIGGER trigger_name DISABLE;
ALTER TRIGGER trigger_name ENABLE;

如果要禁用 或启用一个表上的所有触发器,可以使用:

ALTER TABLE emp DISABLE ALL TRIGGERS;
ALTER TABLE emp ENABLE ALL TRIGGERS;

名称与权限的管理

触发器的名称空间与子程序、包和表的名称空间不同,触发器存在于单独的名称空间,因此可以与表和过程同名,只需要确保在一个方案下所有的触发器名称不同即可,也就是说可以在emp表上建立一个emp触发器。
虽然触发器和表可以使用相同的名称,编译不会报错,但是这样会导致整个系统混乱,所以实际应用中,我们应该避免这种情况。

触发器是一个存储在数据库字典中的方案对象,除了触发器本身要具有一定的访问权限外,此触发器的所有者必须对触发器所引用的对象具有必要的对象特权,而且这些特权必须被直接赋予,不能通过角色进行赋予。比如在创建系统级的触发器时,创建者除了具有CREATE TRIGGER权限或CREATE ANY TRIGGER权限外,也需要具有ADMINISTER DATABABSE TRIGGER权限。
GRANT ADMINISTER DATABASE TRIGGER TO scott;
有了这个权限后,scott用户就可以创建DATABASE级别的系统触发器了。

通过查询dba_sys_privs可以查询用户当前的 用户权限和角色权限。

触发器相关的权限列表:

权限名称

描述

CREATE TRIGGER

允许用户在自己的方案中创建一个触发器

CREATE ANY TRIGGER

允许用户在除SYS以外的方案中创建触发器,但是注意不要在数据字典表上创建触发器

ALTER ANY TRIGGER

允许用户在除SYS以外的方案中修改触发器,比如对触发器进行启用、禁用或重新编译,但是如果授权用户没有CREATE ANY TRIGGER的权限,则不能对触发器的代码进行更改

DROP ANY TRIGGER

允许用户删除任何除SYS以外的方案中的触发器

ADMINISTER DATABSE TRIGGER

允许用户在数据库上创建或修改系统触发器,授权用户也必须具有CREATE TRIGGER或CREATE ANY TRIGGER的权限

在了解了这些权限后,当用户在创建或修改触发器时出现权限不足的问题时,可以使用DBA用户登录,使用GRANT语句为用户分配这些权限。