#navi(ORACLE) *PLSQL [#n28dc902] #contents **再コンパイルの実行 [#p103a0ac] alter function MY_FUNCTION compile; alter procedure MY_PROCEDURE compile; alter package MY_PACKAGE compile; alter package MY_PACKAGE compile body; **コンパイルエラーの表示 [#f96b34b2] show errors ※ SQL*PLUS のコマンド show err でも良い。 **コンパイル状況の確認 [#k49ae12f] 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 パッケージのコンパイル [#nc04dbd3] コンパイルされていないオブジェクトをコンパイルするための 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 になってしまう [#n3ae28d8] CREATE OR REPLACE PACKAGE で作成すると、作成時にはエラーがでないものの STATUS が INVALID になってしまう場合がある。(Oracle 9i 9.2.0.6.0 で確認) DROP PACKAGE で、パッケージを削除してから、再作成したところ VALID になった。 (原因は不明、なぜだろう?) **ソースコードの確認 [#jeba161d] 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; #vote(参考になった[29],参考にならなかった[3]) #vote(参考になった[30],参考にならなかった[3])