2011-01-12 6 views
16

Jak rozpoznać, czy używany jest pakiet, procedura lub funkcja PL/SQL? Czy istnieje tabela lub widok Oracle zawierający statystyki dotyczące pakietu, procedury lub użycia funkcji PL/SQL?Jak rozpoznać, czy używany jest pakiet, procedura lub funkcja PL/SQL?

+8

Upuść je i sprawdź, czy odbierasz połączenia od użytkowników? :-) –

+0

Zdefiniuj "użycie", ponieważ może istnieć funkcja/proc/function, która jest rzadko używana - nie oznacza, że ​​powinna zostać usunięta. –

Odpowiedz

5

Nie domyślnie. Można jednak użyć funkcji kontroli bazy danych Oracle. Na Ask Tom jest długi wątek na temat kontroli wywołań procedur!

1

Możesz sprawdzić, czy obiekt ma jakieś zależności, wysyłając zapytanie do tabeli 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'); 

To zapytanie zwróci wszystkie zależności w kodzie przechowywanym wewnątrz samej instancji Oracle.

Nie ujawnia, czy jakikolwiek obiekt jest wywoływany poza instancją.

+0

Nie widzę, jak to odpowiada na pytanie, procedura może nie mieć zależności, ale jest wywoływana bezpośrednio z następnej warstwy, a inna może mieć pewne zależności, ale nie jest w ogóle wywoływana ani inne funkcje, które mogą wywoływać to, więc nigdy "używane". Możesz rozwinąć swoją odpowiedź, aby pokazać, jak rozwiązuje ona to pytanie. Nie odrzucam tego, ponieważ jesteś nowy na stronie, BTW, witam w SO! – jachguate

+0

Pierwotne pytanie nie wspomniało o tym, czy szukali dzwoniących w innej warstwie. Nie byłoby możliwe, aby sama instancja Oracle wiedziała, które warstwy poza instancją wywoływały określoną funkcję. Moja odpowiedź polegała po prostu na pokazaniu zależności w kodzie przechowywanym w instancji Oracle. – JordanBean

3

Jeśli jesteś na Oracle 11 (R2?), Dałbym PL/Scope szansę.

Dokument stwierdza: PL/Scope jest narzędziem opartym na kompilatorze, które zbiera dane o identyfikatorach w kodzie źródłowym PL/SQL w czasie kompilacji programu programowego i udostępnia je w widokach słowników danych statycznych. Zebrane dane zawierają informacje o typach identyfikatorów, zwyczajach (deklaracja, definicja, odwołanie, wywołanie, przypisanie) oraz lokalizacji każdego użycia w kodzie źródłowym.

PL/Zakres umożliwia rozwój silnych i skutecznych PL/Zakres przeglądarek kodu źródłowego, które zwiększają PL/SQL produktywność programistów poprzez zminimalizowanie czasu przeglądania i zrozumienie kodu źródłowego.

można znaleźć więcej na ten temat na http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17125/adfns_plscope.htm#g1010526

+0

PL/Zakres nie pomoże sytuacji PO - chcą wiedzieć, jak często funkcja lub procedura jest * faktycznie * używana, a nie * potencjalnie * używana. –

0

Można również znaleźć PL/SQL pakietu oprzyrządowania ILO przydatnych dla co próbujesz zrobić.

12

Możesz także spróbować zapytań USER/ALL_source:

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

lub

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

Musisz ignorować odniesienia własny, ale to powinno być łatwe do wykrycia.

Musisz również sprawdzić "widok" źródła od użytkownika/all_views. Zobacz inne pytanie dotyczące sprawdzania źródła widoku.

można również sprawdzić, czy opakowanie lub top funkcja Poziom/procedura jest stosowana z

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

NB: przełączyć użytk._ z all_/dba_ co potrzebne

jeśli są specjalnie szuka funkcji zażądanych następnie inną opcją jest kompilator kod z ostrzeżeniami włączony, a następnie poszukać PLW-06002 i 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

można użyć Editors jak ropucha.Będą bezpośrednio wymieniać zarówno obiekty, od których zależy twoja procedura, jak i obiekty, które odwołują się do twojej procedury.

Powiązane problemy