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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top