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

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

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

Sql代码   收藏代码
  1. select name,type,referenced_name,referenced_type from user_dependencies  
  2. where referenced_owner='SCOTT'  
  3. order by name;  

 

Text代码   收藏代码
  1. F       FUNCTION            T     TABLE  
  2. P1    PROCEDURE       V     VIEW   
  3. P2    PROCEDURE       P1   PROCEDURE  
  4. V       VIEW                      T    TABLE  

 

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

Sql代码   收藏代码
  1. select user_objects.object_name,user_objects.object_type,user_objects.status from user_objects  

 

Text代码   收藏代码
  1. F       FUNCTION                       INVALID  
  2. P1    PROCEDURE                  INVALID  
  3. P2    PROCEDURE                  INVALID  
  4. T      TABLE                               VALID  
  5. V      VIEW                                 INVALID  

 

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

Java代码   收藏代码
  1. select name,type,referenced_name,referenced_type from user_dependencies  
  2. where referenced_owner='SCOTT'  
  3. order by name;  

 

Text代码   收藏代码
  1. PKG1    PACKAGE BODY       V             VIEW   
  2. PKG1    PACKAGE BODY       PKG1     PACKAGE   
  3. PKG2    PACKAGE BODY       PKG2     PACKAGE   
  4. PKG2    PACKAGE BODY       PKG1     PACKAGE   
  5. V            VIEW                            T              TABLE  

 

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

Sql代码   收藏代码
  1. select user_objects.object_name,user_objects.object_type,user_objects.status from user_objects  

 

Text代码   收藏代码
  1. P1    PACKAGE BODY                         INVALID  
  2. P2    PACKAGE BODY                         VALID  
  3. P1    PACKAGE                                     VALID   
  4. P2    PACKAGE                                     VALID  
  5. T      TABLE                                           VALID  
  6. V      VIEW                                              INVALID  

 

(转载自:http://fhuan123.iteye.com/blog/659366)


你可能感兴趣的:(oracle,sql,数据库,function,user,table)