スキーマ内でパッケージの状態が「INVALID」をすべて再コンパイルする。
declare G_SCHEMA constant varchar2(100) := 'orcl'; W_SQL varchar2(1000); W_CNT pls_integer := 0; W_ERR_CNT pls_integer := 0; cursor REC_CUR is select 'alter PACKAGE ' || OBJECT_NAME || ' compile' from dba_objects where OWNER = C_SCHEMA and OBJECT_TYPE = 'PACKAGE BODY' and STATUS = 'INVALID'; begin open REC_CUR; loop fetch REC_CUR into W_SQL; exit when REC_CUR%notfound; begin W_CNT := W_CNT + 1; execute immediate W_SQL; dbms_output.put_line(W_SQL || ' -> COMPILE SUCCESS'); exception when other then W_ERR_CNT := W_ERR_CNT + 1; dbms_output.put_line(W_SQL || ' -> COMPILE FAILED'); end; end loop; close REC_CUR; dbms_output.put_line('SUCCESS CNT = ' || W_CNT); dbms_output.put_line(FAILED CNT = ' || W_ERR_CNT); exception when others then close REC_CUR; end;
- 実行はsqlplus上で行う必要がある
- 失敗したSQLが表示される
- 結果として成功した件数と、失敗した件数が表示される