¿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?
Respuesta
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!
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.
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
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
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
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. –
También puede encontrar el paquete de instrumentación sql pl/ILO útil para lo que estamos tratando de hacer.
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
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.
- 1. ¿Cómo se puede saber si se instala un servicio de Windows utilizando (preferentemente) solo un lote?
- 2. ¿Cómo puede saber mi programa si Delphi se está ejecutando?
- 3. ¿Cómo se puede saber si un QMutex está bloqueado o no?
- 4. ¿Cómo se puede saber si una transmisión está cerrada?
- 5. ¿Cómo se puede saber si dos comodines se superponen?
- 6. ¿Cómo se puede saber si el iPhone se bloquea?
- 7. ¿Cómo saber si un objeto se libera automáticamente o no?
- 8. ¿Cómo saber si se está ejecutando un temporizador?
- 9. ¿Cómo puedo saber si un proceso se está ejecutando?
- 10. ¿Cómo se puede saber si un activador está habilitado en PostgreSQL?
- 11. Cómo eliminar el procedimiento o la función del paquete
- 12. Usando JavaScript, ¿cómo se puede saber si un usuario está retrocediendo?
- 13. Cómo saber si el servidor de emacs se está ejecutando
- 14. ¿Cómo puedo saber si se está mostrando ModalViewController?
- 15. ¿Cómo se puede saber qué panel de Tmux está enfocado?
- 16. Cómo saber si el servicio se está ejecutando utilizando adb shell en android
- 17. Cómo saber si un alojamiento compartido se está ejecutando 32 o 64 bit - con php
- 18. Cómo saber con certeza si FastCGI se está utilizando para ejecutar scripts php
- 19. ¿Cómo se puede saber si ya no se necesita un alijo de git?
- 20. ¿Cómo se ejecuta un procedimiento almacenado utilizando Castle ActiveRecord?
- 21. ¿Cómo se puede saber si una entidad EF4 es nueva o un registro existente?
- 22. Cómo saber si un usuario está visitando "/Default.aspx" o simplemente "/"
- 23. ¿Cómo saber si la actualización MATERIALIZED VIEW se está ejecutando?
- 24. Cómo saber si un directorio se monta de forma remota utilizando Java
- 25. ¿Cómo puedo verificar si existe un procedimiento en un paquete?
- 26. Cómo saber si se usa glibc
- 27. EntityFramework Procedimiento o función '' espera parámetro '', que no se suministró
- 28. ¿Cómo se puede saber si una referencia de objeto IDisposable está dispuesta?
- 29. ¿Cómo puedo saber si una tabla mysql está utilizando myISAM o InnoDB Engine?
- 30. ¿Cómo se puede saber si la sesión de la terminal actual está en la pantalla GNU?
Déjelos, y vea si recibe alguna llamada de sus usuarios? :-) –
Definir "uso", porque puede haber un paquete/proc/función que rara vez se utiliza, no significa que deba eliminarse. –