출처  :   http://forums.oracle.com/forums/thread.jspa?threadID=469195&tstart=420



제품 : ORACLE SERVER

작성날짜 : 2002-04-18




INVALID 상태의 OBJECT를 RECOMPILE하는 PROCEDURE
============================================================




Purpose
-----------------------------------------------------------------------------------------------------

Import를 하거나 DDL 작업을 하고 나서 procedure 나 package등의 pl/sql object가 invalid로 빠지는 경우가 있다.
이런 object들을 찾아서 recompile해주는 procedure를 소개한다.




Explanation
-----------------------------------------------------------------------------------------------------

이 procedure는 User 내의 모든 Invalid 상태의 procedure, function, package 등의 Object 들을 Recompile한다.
Compile에러가 발생하는 경우 dbms_output package를 이용하여 화면에 display해 주게 되므로 실행하기
전에 set serveroutput on 을 반드시 실행한다.

Invalid된 object가 많은 경우라면 compile에러의 확인을 위해 spool을 받는 것이 좋다.


CREATE OR REPLACE PROCEDURE RecompileInvalid IS
CURSOR getlist IS SELECT object_type, object_name FROM
user_objects WHERE status = 'INVALID' AND
object_type IN ('PROCEDURE', 'FUNCTION', 'PACKAGE',
'PACKAGE BODY', 'TRIGGER' );
schemaname VARCHAR2(100);
CURSOR geterr ( objname VARCHAR2, objtype VARCHAR2 ) IS
SELECT text, line, position FROM user_errors WHERE
name = objname AND type = objtype;
BEGIN
SELECT username INTO schemaname FROM user_users;
FOR getlistrec IN getlist LOOP
dbms_output.put_line( 'attempting compile on ' ||
getlistrec.object_name );
dbms_ddl.alter_compile( getlistrec.object_type,
schemaname, getlistrec.object_name );
END LOOP;
FOR getlistrec IN getlist LOOP
dbms_output.put_line( '-*-*-ERROR-*-*-' );
dbms_output.put_line( 'compile failed on ' ||
getlistrec.object_name );
FOR geterrrec IN geterr( getlistrec.object_name,
getlistrec.object_type ) LOOP
dbms_output.put_line( 'line: ' || geterrrec.line ||
' col: ' || geterrrec.position );
dbms_output.put_line( substr( geterrrec.text, 1, 100 ));
END LOOP;
END LOOP;
END;
/




Example
-----------------------------------------------------------------------------------------------------

SQL> spool Compile.log
SQL> set serveroutput on
SQL> exec recompileinvalid;
attempting compile on CRYPTIT
attempting compile on CRYPTIT
attempting compile on DECRYPT
attempting compile on ENCRYPT
attempting compile on SYNC_IM_INDEX

PL/SQL procedure successfully completed.

SQL> spool off
 
 

 

+ Recent posts