2011-01-12 18 views
16

¿Cómo se puede saber si se está utilizando un paquete, procedimiento o función PL/SQL? ¿Hay una tabla o vista de Oracle que contenga estadísticas sobre el paquete PL/SQL, el procedimiento o el uso de la función?¿Cómo se puede saber si se está utilizando un paquete, procedimiento o función PL/SQL?

+8

Déjelos, y vea si recibe alguna llamada de sus usuarios? :-) –

+0

Definir "uso", porque puede haber un paquete/proc/función que rara vez se utiliza, no significa que deba eliminarse. –

Respuesta

5

No por defecto. Pero puede utilizar la funcionalidad de auditoría de su base de datos Oracle. ¡En Ask Tom es un hilo largo sobre la auditoría de llamadas de procedimiento!

1

Puede ver si un objeto tiene alguna dependencia al consultar la tabla DBA_DEPENDENCIES.

SELECT OWNER, 
     NAME, 
     TYPE 
    FROM SYS.DBA_DEPENDENCIES 
WHERE REFERENCED_OWNER = '<your object owner>' 
    AND REFERENCED_NAME = '<your object name>' 
    AND REFERENCED_TYPE IN ('PACKAGE', 'PROCEDURE', 'FUNCTION'); 

Esta consulta devolverá cualquier dependencia en el código almacenado dentro de la instancia de Oracle.

No revelará si se llama o no a un objeto fuera de la instancia.

+0

No veo cómo responde esto a la pregunta, un procedimiento puede no tener dependencias, pero ser llamado directamente desde la capa siguiente, y otro podría tener algunas dependencias, pero no se llama en absoluto ni las otras funciones que podrían llamar eso, entonces nunca "usado". Es posible que desee detallar su respuesta para mostrar cómo aborda la cuestión. No estoy bajoneando esto porque eres nuevo en el sitio, por cierto, ¡bienvenido a SO! – jachguate

+0

La pregunta original no mencionaba si estaban buscando personas que llamaban en otra capa o no. Sería imposible para la instancia de Oracle saber qué capas fuera de la instancia llamaban a una función específica. Mi respuesta fue simplemente para mostrar las dependencias en el código que está almacenado en la instancia de Oracle. – JordanBean

3

Si está en Oracle 11 (R2?), Le daría una oportunidad a PL/Scope.

Docu documenta: PL/Scope es una herramienta impulsada por compilador que recopila datos sobre identificadores en código fuente PL/SQL en el tiempo de compilación de la unidad de programa y los pone a disposición en vistas de diccionario de datos estáticos. Los datos recopilados incluyen información sobre tipos de identificadores, usos (declaración, definición, referencia, llamada, asignación) y la ubicación de cada uso en el código fuente.

PL/Ámbito de aplicación permite el desarrollo de los navegadores de código fuente PL/Scope potentes y eficaces que aumentan PL/SQL productividad de los desarrolladores, reduciendo al mínimo la navegación pasado el tiempo y entender el código fuente.

Puede encontrar más sobre él en http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17125/adfns_plscope.htm#g1010526

+0

PL/Scope no ayudará a la situación del OP: quieren saber con qué frecuencia una función o procedimiento es * realmente * utilizado, no * potencialmente * utilizado. –

0

También puede encontrar el paquete de instrumentación sql pl/ILO útil para lo que estamos tratando de hacer.

12

También puede intentar realizar consultas de usuario/ALL_source:

SELECT * FROM all_source 
where UPPER(TEXT) like UPPER('%procedure_name%') 

o

SELECT * FROM all_source 
where UPPER(TEXT) like UPPER('%package.function_name%') 

que tendrá que pasar por alto las referencias mismo, sino que debe ser fácil de detectar.

También deberá marcar la fuente "ver" del usuario/all_views. Sin embargo, ve la otra pregunta sobre consultar fuente de vista.

también se puede comprobar si un paquete o función de nivel/procedimiento de arriba se utiliza con

select * from all_dependencies 
where referenced_name like '%PACKAGE_NAME%'; 

NB: cambiar usuario_ con ALL_/DBA_ según sea necesario

si usted está buscando específicamente para funciones no llamados a continuación, otra opción es compilador el código con advertencias activada y luego buscar las MEL-06002 y LPW-06006

exec DBMS_WARNING.add_warning_setting_cat('ALL','ENABLE','SESSION') 
create or replace function x return number 
as 
procedure y is begin null; end; 
begin 
return 0; 
return 1; 
end; 

show errors 

Errors for FUNCTION X: 

LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
1/1  PLW-05018: unit X omitted optional AUTHID clause; default value DEFINER used 
3/1  PLW-06006: uncalled procedure "Y" is removed. 
6/1  PLW-06002: Unreachable code 
1

puede utilizar editores como sapo.Ellos enumerarán directamente tanto los objetos de los cuales depende su procedimiento como los objetos que hacen referencia a su procedimiento.

Cuestiones relacionadas