2012-07-11 24 views
6

Tengo paquetes con procedimientos que se usan en muchos lugares y en algunos lugares necesito procedimientos ligeramente diferentes, p. actualizando una columna más¿Cómo puedo verificar si existe un procedimiento en un paquete?

Pensé que podría crear un paquete adicional, que contendría algunos pero no todos los procedimientos.

¿Hay alguna manera de registrar una declaración if directamente en las secuencias de comandos, que si no existe el procedimiento en el paquete adicional, recurrir al paquete estándar?

Respuesta

11

Usted debe ser capaz de obtener esta información desde el punto de vista DBA_PROCEDURES:

SELECT * 
    FROM SYS.DBA_PROCEDURES 
    WHERE OBJECT_TYPE = 'PACKAGE' AND 
     OBJECT_NAME = '<your package name>' AND 
     PROCEDURE_NAME = '<your procedure name>' 

Si esto devuelve una fila el procedimiento que le interesa existe en el paquete. Si obtiene una excepción NO_DATA_FOUND, significa que el procedimiento no existe en el paquete.

Comparte y disfruta.

-1
select * from USER_OBJECT where object_type='PACKAGE' AND OBJECT_NAME ='<YOUR PACKAGE NAME>' 
2

¿El usuario que consulta SYS.DBA_PROCEDURES no necesita privilegios especiales? ¿Tal vez consultar SYS.User_Objects requiere menos permisos?

select * from SYS.User_Objects where object_type = 'PACKAGE'; 
1

Usted puede también tratar

SELECT text FROM all_source WHERE name = 'PACKAGE' ORDER BY line; 

trabajado para mí ...

Cuestiones relacionadas