[Oracle]高效的PL/SQL程序设计(三)--Package的

系统 2092 0

本系列文章导航

[Oracle]高效的PL/SQL程序设计(一)--伪列ROWNUM使用技巧

[Oracle]高效的PL/SQL程序设计(二)--标量子查询

[Oracle]高效的PL/SQL程序设计(三)--Package的优点

[Oracle]高效的PL/SQL程序设计(四)--批量处理

[Oracle]高效的PL/SQL程序设计(五)--调用存储过程返回结果集

[Oracle]高效的PL/SQL程序设计(六)--%ROWTYPE的使用

使用Package的优点在于提供了必需的程序设计结构, 促进了模块化编程设计, 最重要的是Package断开了依赖链, 使得对某个数据库模式的改动不会导致整个模式的无效,从而避免了昂贵的重编译!

例如: 存在table t , procedure p1 p2, view v, function f, 它们之间引用关系如下:

select name,type,referenced_name,referenced_type from user_dependencies
where referenced_owner = ' SCOTT '
order by name;
F FUNCTION T TABLE
P1PROCEDURE V VIEW
P2 PROCEDURE P1PROCEDURE
V VIEWTTABLE

当alter table t add y number时, 依赖于t的所有对象(包括传递依赖的对象, 即p1依赖于t, p2依赖于p1)就全部无效, 需要重新编译(如果代码很复杂, 就会有较大的消耗)

select user_objects. object_name ,user_objects.object_type,user_objects.status from user_objects
F FUNCTIONINVALID
P1PROCEDUREINVALID
P2PROCEDUREINVALID
T TABLE VALID
V VIEWINVALID

如果使用程序包之后table t , package pkg1,pkg2, view v, 可以发现PACKAGE BODY是依赖于PACKAGE, 而PKG2依赖于PKG1的PACKAGE, 而不是PACKAGE BODY

select name,type,referenced_name,referenced_type from user_dependencies
where referenced_owner = ' SCOTT '
order by name;
PKG1PACKAGE BODY V VIEW
PKG1PACKAGE BODYPKG1PACKAGE
PKG2PACKAGE BODYPKG2PACKAGE
PKG2PACKAGE BODYPKG1PACKAGE
V VIEW T TABLE

当alter table t add y number时,会发现PK1的PACKAGE BODY会无效, 但是PKG2的PACKAGE BODY是有效的

select user_objects. object_name ,user_objects.object_type,user_objects.status from user_objects
P1PACKAGE BODYINVALID
P2PACKAGE BODY VALID
P1PACKAGEVALID
P2PACKAGE VALID
T TABLE VALID
V VIEW INVALID

博文来源:

http://blog.csdn.net/huanghui22/archive/2007/05/22/1620606.aspx

[Oracle]高效的PL/SQL程序设计(三)--Package的优点


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论