PLSQL †再コンパイルの実行 †alter function MY_FUNCTION compile; alter procedure MY_PROCEDURE compile; alter package MY_PACKAGE compile; alter package MY_PACKAGE compile body; コンパイルエラーの表示 †show errors ※ SQL*PLUS のコマンド show err でも良い。 コンパイル状況の確認 †STATUS が VALID なら OK、INVALID なら NG set linesize 200 set pagesize 0 col OBJECT_NAME FORMAT A30 select OBJECT_TYPE,OBJECT_NAME,STATUS,OWNER from dba_objects where OWNER = 'xxxxxx' and OBJECT_TYPE in ('PACKAGE BODY', 'PACKAGE') / INVALID パッケージのコンパイル †コンパイルされていないオブジェクトをコンパイルするための alter 文を生成する。 select 'alter ' || decode(OBJECT_TYPE, 'PACKAGE BODY', 'PACKAGE', OBJECT_TYPE) || ' ' || OBJECT_NAME || ' compile;' from dba_objects where OWNER = 'username' and STATUS = 'INVALID' / CREATE OR REPLACE は成功するが、STATUS が INVALID になってしまう †CREATE OR REPLACE PACKAGE で作成すると、作成時にはエラーがでないものの STATUS が INVALID になってしまう場合がある。(Oracle 9i 9.2.0.6.0 で確認) DROP PACKAGE で、パッケージを削除してから、再作成したところ VALID になった。 (原因は不明、なぜだろう?) ソースコードの確認 †SET TRIMS ON SET LONG 100000 SET PAGESIZE 0 SELECT DBMS_METADATA.GET_DDL('PACKAGE', 'PACKAGE_NAME' ) ,DBMS_METADATA.GET_DDL('PACKAGE_BODY', 'PACKAGE_NAME') FROM DUAL; |