查看触发器源码
可以通过DBA_TRIGGERS
、ALL_TRIGGERS
、USER_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语句为用户分配这些权限。