Reprinted with Permission by Quest Software April 2005


Compiling Triggers

Material Dreams
set echo on
set feedback on
set serveroutput on

/**********************************************************************************************************/
/*                                                                                                        */
/* Procedure:   CompileTrigger                                                                            */
/* Description: This procedure compiles all triggers in the specified schema.                             */
/*              This process only takes place in the server and therefore is usually is mutch faster      */
/*              then other spooling based scripts.                                                        */
/* Version:    	1.3.0                                                                                     */ 
/* Required:	Oracle Server Version 7.3 or higher and the appropriate rights.                           */
/*              GRANT CONNECT TO <user>;                                                                  */
/*              GRANT UNLIMITED TABLESPACE TO <user>;                                                     */
/*              GRANT CREATE PROCEDURE TO <user>;                                                         */
/*              GRANT EXECUTE ON dbms_output TO <user>;                                                   */
/*              GRANT EXECUTE ON dbms_sql TO <user>;                                                      */
/*              GRANT SELECT ON all_triggers TO <user>;                                                   */
/*              GRANT ALTER ANY TRIGGER TO <user>;                                                        */
/*                                                                                                        */
/* Written by: 	Material Dreams                                                                           */
/* EMail:       info@materialdreams.com                                                                   */
/* WWW:         http://www.materialdreams.com/oracle                                                      */
/*                                                                                                        */
/* License:     This script can be freely distributed as long as this header will not be removed and      */
/*              improvements and changes to this script will be reported to the author.                   */
/*                                                                                                        */
/*              Copyright (c) 1995-2004 by Material Dreams. All Rights Reserved.                          */
/*                                                                                                        */
/**********************************************************************************************************/

CREATE OR REPLACE PROCEDURE CompileTrigger(theSchema IN VARCHAR2, theDebugFlag IN INTEGER DEFAULT 0) AS
BEGIN
DECLARE
	v_SqlCmd	VARCHAR2(2000);
	v_Cursor	INTEGER := 0;
	v_RetCode	INTEGER := 0;
	v_Count		INTEGER := 0;

CURSOR C1 IS 
SELECT		'ALTER TRIGGER ' || owner || '.' || trigger_name || ' COMPILE'
FROM		all_triggers
WHERE		table_owner = upper(theSchema)
ORDER BY	owner, trigger_name;

BEGIN

	IF theDebugFlag = 1 THEN
		SYS.DBMS_OUTPUT.ENABLE(1000000);
	END IF;

	v_Cursor := SYS.DBMS_SQL.OPEN_CURSOR;

	OPEN C1;

	LOOP
		FETCH C1 INTO v_SqlCmd;
		EXIT WHEN C1%NOTFOUND;
		IF theDebugFlag = 1 THEN
			SYS.DBMS_OUTPUT.PUT_LINE('Execute -> ' || v_SqlCmd);
		ELSE
   			SYS.DBMS_SQL.PARSE(v_Cursor, v_SqlCmd, DBMS_SQL.V7);
   			v_RetCode := SYS.DBMS_SQL.EXECUTE(v_Cursor);
		END IF;
		v_Count := v_Count + 1;
	END LOOP; 

	CLOSE C1;

	SYS.DBMS_SQL.CLOSE_CURSOR(v_Cursor);

	SYS.DBMS_OUTPUT.PUT_LINE('*** The procedure CompileTrigger has compiled ' || v_Count || ' trigger(s).');

END;

END CompileTrigger;
/