Je compare trois schémas Oracle.
Je souhaite obtenir une liste de toutes les fonctions et procédures utilisées dans chaque base de données. Est-ce possible via une requête? (de préférence avec un drapeau indiquant s'ils compilent ou non)
Dans l'idéal, il serait intéressant de disposer d'une requête unique avec un indicateur indiquant si la fonction/procédure est présente dans chaque schéma. Mais même le premier bit serait préférable à l'inspection manuelle de chaque schéma.
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')
La colonne STATUS vous indique si l'objet est VALID ou INVALID. S'il n'est pas valide, vous devez essayer une recompilation, Oracle ne peut pas vous dire s'il fonctionnera auparavant.
Faites une description sur dba_arguments, dba_errors, dba_procedures, dba_objects, dba_source, dba_object_size. Chacune de ces images contient une partie des images permettant d’examiner les procédures et les fonctions.
De plus, object_type dans dba_objects for packages est 'PACKAGE' pour la définition et 'PACKAGE BODY "pour le corps.
Si vous comparez des schémas sur la même base de données, essayez:
select * from dba_objects
where schema_name = 'ASCHEMA'
and object_type in ( 'PROCEDURE', 'PACKAGE', 'FUNCTION', 'PACKAGE BODY' )
minus
select * from dba_objects
where schema_name = 'BSCHEMA'
and object_type in ( 'PROCEDURE', 'PACKAGE', 'FUNCTION', 'PACKAGE BODY' )
et permutez les ordres de ASCHEMA et BSCHEMA.
Si vous devez également examiner les déclencheurs et comparer d'autres éléments entre les schémas, consultez le article sur Ask Tom concernant la comparaison des schémas