关于触发器创建的陷阱

Oracle触发器的创建和存储过程、函数、包等的创建有点区别,应当注意.

陷阱一:

当前schema与触发器拥有者不一致

例如:

当前登录的schema为R5_T150,然后执行下面的创建触发器:

create or replace trigger "R5_T135".TRI_forbidden_01
  before update or delete of GOODSCODE on t_goods
begin
        RAISE_APPLICATION_ERROR(-20002, 'forbidden operations!');
end TRI_forbidden_01;

如果是存储过程、函数,这样创建是没有问题的,但触发器不一样,为什么?

注意触发器是可以跨schema的(系统级触发器).所以上面的代码最终创建的触发器应会是属于R5_T135(它是DBA角色)这个schema,但所触发的表却是R5_T150的.

这样就会在PL/SQL DEV工具里出现一个奇怪的现象,在当前SCHEMA下,查看表上的触发器会发现有"R5_T135".TRI_FORBIDDEN_01,但去查看当前SCHEMA所有的触发器却找不到它.


陷阱二:

如果我们使用PL/SQL DEV中的sql Window来创建触发器(或将下面的代码使用sqlplus脚本来创建):

create or replace trigger  TRI_forbidden_01
  before update or delete of GOODSCODE on t_goods
begin
        RAISE_APPLICATION_ERROR(-20002, 'forbidden operations!');
end TRI_forbidden_01;

alter trigger TRI_forbidden_01 enable;

这样创建的触发器将显示为编译无效的状态,查看其源码,发现最后一句alter trigger TRI_forbidden_01 enable;也会在触发器的源码之中.


最后:特别注意不要创建类似这样命名的触发器"TRI_aaBB","TrI_Test",因为有些工具删除或编译这样的触发器时会报错,到时只能用命令来操作,相当麻烦.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值