在11.1中,Oracle做到了对象的列级依赖,但是触发器并没有做到这一点。在11.2的新特性文档中提到了触发器也具备了列级依赖的能力。
这一篇介绍触发器列级依赖存在的问题。
Oracle11gr2触发器依赖判断增强(一):http://yangtingkun.itpub.net/post/468/492503
Oracle11新特性——在线操作功能增强(三):http://yangtingkun.itpub.net/post/468/401641
前面一篇文章介绍了触发器的依赖,但是这种依赖是对于触发器的依赖。如果触发器执行的语句中,依赖了其他对象,是否也能像存储过程那样做到列级依赖呢:
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> create table t (id number, name varchar2(30));
表已创建。
SQL> create table t_log (id number);
表已创建。
SQL> create trigger t
2 before insert on t
3 for each row
4 begin
5 insert into t_log (id) values (:new.id);
6 end;
7 /
触发器已创建
SQL> select object_name, object_type, status
2 from user_objects
3 where object_name = 'T';
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------- -------
T TABLE VALID
T TRIGGER VALID
SQL> alter table t_log add (create_date date default sysdate not null);
表已更改。
SQL> select object_name, object_type, status
2 from user_objects
3 where object_name = 'T';
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------- -------
T TRIGGER INVALID
T TABLE VALID
显然触发器的列级依赖只是针对触发表,而触发器执行语句中依赖的对象并没有做到列级触发。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-616242/ ,如需转载,请注明出处,否则将追究法律责任。