ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

PACKAGE再コンパイルsql

スキーマ内でパッケージの状態が「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;
  1. 実行はsqlplus上で行う必要がある
  2. 失敗したSQLが表示される
  3. 結果として成功した件数と、失敗した件数が表示される