#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])

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS