Ottieni un elenco di tutte le funzioni e procedure in un database Oracle
Domanda
Sto confrontando tre schemi Oracle.
Voglio ottenere un elenco di tutte le funzioni e procedure utilizzate in ciascun database. È possibile tramite una query? (preferibilmente includendo una bandiera sulla compilazione o meno)
Idealmente sarebbe bello avere una singola query con un flag che indica se la funzione / procedura è in ogni schema. Ma anche solo il primo bit sarebbe meglio che ispezionare manualmente ogni schema.
Soluzione
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')
La colonna STATUS indica se l'oggetto è VALID o INVALID. Se non è valido, devi provare a ricompilare, ORACLE non può dirti se funzionerà prima.
Altri suggerimenti
Fai una descrizione su dba_arguments, dba_errors, dba_procedures, dba_objects, dba_source, dba_object_size. Ognuno di questi ha una parte delle immagini per esaminare le procedure e le funzioni.
Anche object_type in dba_objects per i pacchetti è 'PACKAGE' per la definizione e 'PACKAGE BODY " per il corpo.
Se si stanno confrontando schemi sullo stesso database, provare:
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' )
e cambia gli ordini di ASCHEMA e BSCHEMA.
Se devi anche guardare i trigger e confrontare altre cose tra gli schemi, dovresti dare un'occhiata a Articolo su Chiedi a Tom sul confronto di schemi