Oracle11g新特性:在线操作功能增强-Oracle对象依赖性判断增强 (转载)

在11g之前,Oracle判断依赖性只达到了对象级,也就是说存储过程访问的对象一旦发生了变化,那么Oracle就会将存储过程置为INVALID状态。 

    Oracle使用这种方法强制存储过程在下次执行之前进行重编译,避免表结构改变后,存储过程没有更新,从而得到错误的结果。 

    这种方法没有问题,但是有的时候修改往往和关联的存储过程没有关系,但是Oracle并不对这种情况进行判断,这样会造成很多不需要重新编译的存储过程也被置于INVALID状态: 

  
  
SQL > CREATE TABLE T (ID NUMBER ); 表已创建。 SQL > CREATE OR REPLACE PROCEDURE P_TEST AS 2 BEGIN 3 INSERT INTO T (ID) VALUES ( 1 ); 4 END ; 5 / 过程已创建。 SQL > SELECT OBJECT_NAME , OBJECT_TYPE, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = ' P_TEST ' ; OBJECT_NAME OBJECT_TYPE STATUS -- ---------------------------- ------------------- ------- P_TEST PROCEDURE VALID SQL > ALTER TABLE T ADD (NAME VARCHAR2 ( 30 )); 表已更改。 SQL > SELECT OBJECT_NAME , OBJECT_TYPE, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = ' P_TEST ' ; OBJECT_NAME OBJECT_TYPE STATUS -- ---------------------------- ------------------- ------- P_TEST PROCEDURE INVALID SQL > SELECT * FROM V$VERSION; BANNER -- -------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2 . 0.1 . 0 - Prod PL / SQL Release 10.2 . 0.1 . 0 - Production CORE 10.2 . 0.1 . 0 Production TNS for 32 - bit Windows: Version 10.2 . 0.1 . 0 - Production NLSRTL Version 10.2 . 0.1 . 0 - Production


    上面这个简单的例子就说明了这种情况,对于存储过程P_TEST来说,只是访问了T的ID列,T表新增NAME列,并不会影响存储过程P_TEST。但是在10g及以前版本,Oracle的判断依赖性达不到字段级。 

    而从11g开始,Oracle细化了依赖性的判断,下面看看在11g中同样的例子:

  
  
SQL > CONN YANGTK / yangtk @ORA11G已连接 。 SQL > CREATE TABLE T (ID NUMBER ); 表已创建。 SQL > CREATE OR REPLACE PROCEDURE P_TEST AS 2 BEGIN 3 INSERT INTO T (ID) VALUES ( 1 ); 4 END ; 5 / 过程已创建。 SQL > SELECT OBJECT_NAME , OBJECT_TYPE, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = ' P_TEST ' ; OBJECT_NAME OBJECT_TYPE STATUS -- ---------------------------- ------------------- ------- P_TEST PROCEDURE VALID SQL > ALTER TABLE T ADD (NAME VARCHAR2 ( 30 )); 表已更改。 SQL > SELECT OBJECT_NAME , OBJECT_TYPE, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = ' P_TEST ' ; OBJECT_NAME OBJECT_TYPE STATUS -- ---------------------------- ------------------- ------- P_TEST PROCEDURE VALID SQL > SELECT * FROM V$VERSION; BANNER -- --------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.1 . 0.6 . 0 - Production PL / SQL Release 11.1 . 0.6 . 0 - Production CORE 11.1 . 0.6 . 0 Production TNS for Linux: Version 11.1 . 0.6 . 0 - Production NLSRTL Version 11.1 . 0.6 . 0 - Production
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七七powerful

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值