Compiler les objects en erreur sous oracle

Description

Pour ma première source je poste un script qui permet de compiler les objets en erreur (PACKAGE, PACKAGE BODY, VIEW, FUNCTION, TRIGGER, et PROCEDURE stocké )

Script testé uniquement sous Oracle 8I et 9I mais devrait fonctionner sous toutes les versions d'Oracle.

Une fois connecté sous un Schema spécifique exécutez le petit script si dessous.
Celui ci parcourt tous les objets du Shema en statut 'INVALIDE' et génère un script avec les commandes de compilation.

Une fois le script généré il l'exécute en affichant après chaque compilation les erreurs pouvant être survenues pendant la compilation.

Puis en fin de script, il affiche les objets qu'il n'a pas réussi à passer en mode 'VALID'

Voilà

Source / Exemple :


-- pour ne pas avoir de saut de page
SET PAGES 0

-- on n'affiche rien à l'écran
SET ECHO OFF

-- Le nom du script sql qui sera généré
SPOOL ${ORACLE_SID}_compile.sql

PROMPT SET ECHO ON

-- selection de tous les objets en status invalide
-- et génération de la ligne de commande pour les compiler 
-- suivi d'un 'show error ' dans le script
SELECT 'alter '||
       decode(object_type, 'PACKAGE BODY','PACKAGE',object_type) ||
       ' '||object_name||
       ' compile '||decode(object_type,'PACKAGE','PACKAGE', 'PACKAGE BODY','body',null)
       ||chr(10)||'/'||chr(10)||'show errors'
 FROM user_objects
WHERE object_type IN ('PACKAGE','PACKAGE BODY','VIEW', 'FUNCTION','TRIGGER','PROCEDURE')
  AND status = 'INVALID'
ORDER BY decode(object_type,'VIEW',1,
                            'FUNCTION',2,
                            'PROCEDURE',3,
                            'PACKAGE',4,
                            'PACKAGE BODY',5,
                            'TRIGGER',6,7)
/
PROMPT SET ECHO OFF
-- on ferme le script généré
SPOOL OFF

-- création d'un fichier log pour archivé les SHOW ERROR après chaque compilation
SPOOL ${ORACLE_SID}_compile.log

-- execution du script généré
@${ORACLE_SID}_compile.sql

SPOOL OFF
REM

-- et enfin on affiche de nouveau les objets toujours 
-- en statu 'INVALIDE' après la compilation

SET PAGESIZE 500
TTITLE 'Invalid Objects'
COLUMN c format a70 HEADING 'Object_name(Object_type)'

SELECT object_name||'('||object_type||')' c 
  FROM user_objects 
 WHERE status='INVALID'
ORDER BY object_type,object_name;

Conclusion :


Voilà, c'est un petit script sans prétention mais bien utile.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.