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;
選択肢 投票
参考になった 30  
参考にならなかった 3  


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-02-19 (木) 16:33:16 (3348d)