ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 包中添加新过程应在尾部添加

包中添加新过程应在尾部添加

原创 Linux操作系统 作者:yangtingkun 时间:2011-09-11 23:56:54 0 删除 编辑

在看高级应用开发手册时,在对象依赖部分,注意到这个细节。

 

 

其他对象依赖包中的过程或函数,如果这个过程或函数在包中的位置发生了变化,那么依赖当前过程或函数的对象会被置为INVALID状态。

SQL> CREATE OR REPLACE PACKAGE P_TEST AS
  2     PROCEDURE P1;
  3     FUNCTION F1 RETURN NUMBER;
  4  END;
  5  /

Package created.

SQL> CREATE OR REPLACE FUNCTION F2 RETURN NUMBER AS
  2  BEGIN
  3     RETURN P_TEST.F1;
  4  END;
  5  /

Function created.

SQL> SELECT OBJECT_NAME, STATUS     
  2  FROM USER_OBJECTS
  3  WHERE OBJECT_NAME IN ('P_TEST', 'F2');

OBJECT_NAME                    STATUS
------------------------------ -------
F2                             VALID
P_TEST                         VALID

SQL> CREATE OR REPLACE PACKAGE P_TEST AS
  2     PROCEDURE P1;
  3     FUNCTION F1 RETURN NUMBER;
  4     PROCEDURE P3;
  5  END;
  6  /

Package created.

SQL> SELECT OBJECT_NAME, STATUS
  2  FROM USER_OBJECTS
  3  WHERE OBJECT_NAME IN ('P_TEST', 'F2');

OBJECT_NAME                    STATUS
------------------------------ -------
F2                             VALID
P_TEST                         VALID

SQL> CREATE OR REPLACE PACKAGE P_TEST AS
  2     PROCEDURE P1;
  3     PROCEDURE P2;
  4     FUNCTION F1 RETURN NUMBER;
  5     PROCEDURE P3;
  6  END;
  7  /

Package created.

SQL> SELECT OBJECT_NAME, STATUS
  2  FROM USER_OBJECTS
  3  WHERE OBJECT_NAME IN ('P_TEST', 'F2');

OBJECT_NAME                    STATUS
------------------------------ -------
F2                             INVALID
P_TEST                         VALID

如果将新增过程置于包的尾部,则不会影响依赖关系。而如果将新增过程置于某些已有过程或函数的前面,则所有依赖这些过程或函数的对象将被置于INVALID状态,这是由于依赖关系和过程或函数在包中的位置有关。

不过这种位置只是过程或函数的排序,和具体所在行数无关,而且只和过程或函数有关,如果新增变量则不会产生影响:

SQL> ALTER FUNCTION F2 COMPILE;

Function altered.

SQL> SELECT OBJECT_NAME, STATUS
  2  FROM USER_OBJECTS
  3  WHERE OBJECT_NAME IN ('P_TEST', 'F2');

OBJECT_NAME                    STATUS
------------------------------ -------
F2                             VALID
P_TEST                         VALID

SQL> CREATE OR REPLACE PACKAGE P_TEST AS
  2     G_NUM NUMBER;
  3     PROCEDURE P1;
  4     PROCEDURE P2;
  5     FUNCTION F1 RETURN NUMBER;
  6     PROCEDURE P3;
  7  END;
  8  /

Package created.

SQL> SELECT OBJECT_NAME, STATUS
  2  FROM USER_OBJECTS
  3  WHERE OBJECT_NAME IN ('P_TEST', 'F2');

OBJECT_NAME                    STATUS
------------------------------ -------
F2                             VALID
P_TEST                         VALID

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-707193/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1954
  • 访问量
    10651997