Oracle PL/SQL进阶编程(第十四弹:系统事件触发器)

查看触发器源码

可以通过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语句为用户分配这些权限。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值