标签:
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;
最后:特别注意不要创建类似这样命名的触发器"TRI_aaBB","TrI_Test",因为有些工具删除或编译这样的触发器时会报错,到时只能用命令来操作,相当麻烦.
标签:
原文地址:http://blog.csdn.net/edcvf3/article/details/43305881