2013-10-01 24 views
2

我在oracle中有一個主要過程,它在其中調用許多過程。這些內部程序還會調用其中的函數和過程。這繼續到很多層次。 對於前:在oracle中查找從主要過程調用的過程列表

Proc A 

call c 

call d 

end............ 

proc c 

call e 

call f 

end .................... 

proc e 

call j 

call h 

end 

Ĵ調用一些程序在內部調用另一個等等。這個循環繼續。

我想要在執行main api時找到在運行時調用的所有過程的名稱。是否有可能使用蟾蜍找到他們所有的人?有沒有這樣做的工具?

+0

基本上,您希望在執行主程序時看到正在使用哪些所有程序和功能或其他對象? – user75ponic

+0

@polppan,rite ... – battech

+0

看到我的答案,希望這會有所幫助。 – user75ponic

回答

0

通過使用oracle中的dba_dependencies數據字典視圖,您可以檢查主過程中正在使用的過程/函數的名稱。但是,對於運行時檢查,您可能必須編寫DBMS_OUTPUT.PUT_LINE語句,或者可以創建一個audit_log_table,您可以在其中插入過程/函數的名稱。

+0

HI,dba_dependencies只能提供主程序中直接引用的程序和包。但是我需要的是當我調用主程序時可以調用的所有程序,這些程序也將包含被調用的特效來自引用的特效。 – battech

+0

@njnbat你只需要旅行'dba_dependecies'表_recursively_。 – user272735

0

在Toad架構瀏覽器中點擊您正在執行的主程序,在右側面板上有一個標籤Deps(使用者)。在這之下你會發現所有正在使用的物體。

或者你可以做,這將列出所有依賴的對象

SELECT * 
    FROM user_dependencies 
WHERE name = '<your_procedure_name>' AND referenced_type='PROCEDURE' 
+0

dba_dependencies和user_dependencies給了我相同的結果。它沒有提供在主API中的參考程序所調用的程序。因此它不能幫助我的原因。 – battech

+0

@njnbat你是否嘗試過關於蟾蜍的事情? – user75ponic

+0

另外,Oracle的SQL Developer也有類似的功能。 – user272735

1

這裏有一個例子如下如何遞歸旅行user_dependencies

select * from user_dependencies 
start with name = 'MAIN_PROC' 
connect by name = prior referenced_name 
     and type = prior referenced_type 
     and referenced_type in ('PROCEDURE', 'FUNCTION'); 

看到一個演示:---->http://www.sqlfiddle.com/#!4/9ca2a/1

0

我用Oracle AUDIT跟蹤哪個函數ns/procedures/packages由客戶端應用程序使用(從客戶端調用它們)。你可以使用它指定特定的plsql語句名稱,在你的情況下你的主要過程名稱,並進一步追蹤它們。我認爲這可能會有所幫助。