编译包

语法:

alter_package_compile ::=

参数:

SPECIFICATION、BODY和PACKAGE这三个选项分别用于重新编译包头、重新编译包体和重新编译包头和包体。

说明:

包头和包体可以分别编译,也可以一起编译。如果分别编译,则要先编译包头,后编译包体。编译后,包头和包体作为两部分分开的对象存放在数据库字典中。

注解

ALTER PACKAGE并不能改变包的声明或定义;如要做此改变, 必须使用CREATE OR REPLACE PACKAGE或CREATE OR REPLACE PACKAGE BODY语句。

示例:编译包

--  清理环境
DROP PACKAGE mypack;

CREATE OR REPLACE PACKAGE mypack AS
    PROCEDURE proc;
END;
/

CREATE OR REPLACE PACKAGE BODY mypack AS
    PROCEDURE proc AS
    BEGIN
        dbms_output.put_line( 'PROCDURE');
    END;    
BEGIN
    null;
END;

/
EXEC mypack.proc;

--重新编译了包mypack,包括包头和包体
ALTER PACKAGE mypack COMPILE PACKAGE;

--重新编译了包mypack,包括包头
ALTER PACKAGE mypack COMPILE SPECIFICATION;

--重新编译包mypack的包体
ALTER PACKAGE BODY mypack COMPILE BODY;

--删除包
DROP PACKAGE mypack;