2009-11-30 14 views
32

Estoy comparando tres esquemas de Oracle.Obtenga una lista de todas las funciones y procedimientos en una base de datos Oracle

Deseo obtener una lista de todas las funciones y procedimientos utilizados en cada base de datos. ¿Es esto posible a través de una consulta? (preferiblemente incluyendo una bandera en cuanto a si compilan o no)

Idealmente sería genial tener una sola consulta con un indicador que indique si la función/procedimiento está en cada esquema. Pero incluso solo el primer bit sería mejor que inspeccionar manualmente cada esquema.

Respuesta

74
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE') 

La columna ESTADO le indica si el objeto es VÁLIDO o NO ES VÁLIDO. Si no es válido, debe intentar recompilar, ORACLE no puede decirle si funcionará antes.

+0

[ ' 'TABLE''] (https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:941629680330#3455235608260) ¿Puede alguien dar una pista de cómo para borrar funciones/procedimientos/paquetes? – Bitterblue

+0

'drop function xxx',' drop procedure xyz', 'drop package foobar' –

+0

Alguien sugirió editar mi respuesta, de modo que la instrucción' SELECT' solo seleccionaría 'OBJECT_NAME' en lugar de' * '. De todos modos, esta edición ha sido rechazada (por otros revisores que yo); Se debe seleccionar IMO, al menos, 'OBJECT_NAME, OBJECT_TYPE, STATUS' para obtener resultados útiles. Dicho esto, 'SELECT *' no duele en este contexto. –

4

Haz una descripción sobre dba_arguments, dba_errors, dba_procedures, dba_objects, dba_source, dba_object_size. Cada uno de estos tiene parte de las imágenes para ver los procedimientos y funciones. .

También el tipo_objeto en dba_objects paquetes es 'paquete' para la definición y 'PAQUETE DE CUERPO" para el cuerpo

Si está comparando los esquemas sobre la misma base de datos y luego tratar:

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') 

y cambiar los pedidos de ASCHEMA y BSCHEMA.

Si también necesita ver los factores desencadenantes y comparar otras cosas entre los esquemas, debe echar un vistazo al Article on Ask Tom about comparing schemas

Cuestiones relacionadas