oracle

パッケージのコンパイル

開発環境あるあるなのですが、いつのまにかにパッケージのステータスがINVALIDになっている事があります。パッケージ内で使っているオブジェクト(テーブルが主ですね)の再作成(drop&create)等を行う事で発生し、都度コンパイルしてあげる必要があります。(本当は、オブジェクト再作成した人がきちんと対応してあげるべきですよね、、)

指定スキーマのパッケージ一覧
select o.OWNER,o.OBJECT_NAME,o.OBJECT_TYPE,o.STATUS,o.CREATED,o.LAST_DDL_TIME
from dba_objects o where o.OWNER = 'SOONI'
and o.OBJECT_TYPE in ('PACKAGE','PACKAGE BODY')
order by o.OBJECT_TYPE,o.OBJECT_NAME
;
指定スキーマでコンパイルエラーになっているものをコンパイルするSQL出力
select 'ALTER'||' PACKAGE '||o.OWNER||'.'||o.OBJECT_NAME||' COMPILE '
|| decode(o.OBJECT_TYPE,'PACKAGE BODY'
,'BODY',o.OBJECT_TYPE)||';' COMPILE_SQL 
from dba_objects o 
where o.OWNER = 'SOONI' 
and o.OBJECT_TYPE in ('PACKAGE','PACKAGE BODY')
and o.STATUS ='INVALID'
order by o.OBJECT_NAME,o.OBJECT_TYPE
;

シノニム版は以下にあります

スポンサーリンク