oracle触发器判断应用,Oracle11gr2触发器依赖判断增强(一)

在11.1中,Oracle做到了对象的列级依赖,但是触发器并没有做到这一点。在11.2的新特性文档中提到了触发器也具备了列级依赖的能力。

在11.1.0.6上进行的测试:

SQL> create table t (id number);

表已创建。

SQL> create trigger t

2  before update of id on t

3  for each row

4  begin

5  :new.id := 1;

6  end;

7  /

触发器已创建

SQL> col object_name format a30

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 add name varchar2(30);

表已更改。

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                                INVALID

SQL> select * from v$version;

BANNER

-----------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production

PL/SQL Release 11.1.0.6.0 - Production

CORE    11.1.0.6.0      Production

TNS for Solaris: Version 11.1.0.6.0 - Production

NLSRTL Version 11.1.0.6.0 - Production

可以看到虽然触发器明确指明了依赖T的ID列,但是如果T表新增了其他列,仍然会导致触发器被置于INVALID状态。

而在11.2中:

SQL> create table t(id number);

表已创建。

SQL> create trigger t

2  before update of id on t

3  for each row

4  begin

5  :new.id := 1;

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                              TRIGGER             VALID

T                              TABLE               VALID

SQL> alter table t add name varchar2(30);

表已更改。

SQL> select object_name, object_type, status

2  from user_objects

3  where object_name = 'T';

OBJECT_NAME                    OBJECT_TYPE         STATUS

------------------------------ ------------------- -------

T                              TRIGGER             VALID

T                              TABLE               VALID

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

显然列级依赖的问题已经实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值