2014-09-01 28 views
2

我不確定這個問題是否有意義。但想到這裏問這個。查找包或存儲過程中的所有對象

假設我有程序等的下方,

CREATE OR REPLACE 
PROCEDURE PROCEDURE1 AS 
BEGIN 
    SELECT COLA INTO COL **Payment**.TAB1 ; 
    SELECT COLA INTO COL **Checkout**.TAB1 ; 
END PROCEDURE1; 

在上面的代碼。 proc在架構「訂單」中,您可以看到此過程使用的是付款和結帳數據。所以這裏付款和結帳是不同的模式。

我quesiton是,

有沒有一種方法,以確定獲得療法模式列表中的程序或包裹內被使用?

請幫忙。

+2

嗯,我得到了答案SELECT * FROM ALL_DEPENDENCIES WHERE OWNER = USER AND NAME ='PROCEDURE1'AND REFERENCED_OWNER NOT IN('SYS',USER); – Prabhu 2014-09-01 08:59:54

回答

1

假設我們有這樣的過程:

create procedure my_proc 
is 
    l_cursor sys_refcursor; 
begin 
    open l_cursor for select * from all_objects; 
    close l_cursor; 
    open l_cursor for select * from all_tables; 
    close l_cursor; 
    open l_cursor for select * from user_objects; 
    close l_cursor; 
    open l_cursor for select * from user_tables; 
    close l_cursor; 
end my_proc; 

因此,無論明示和暗示的參考文獻可以發現這樣的:

select NAME, referenced_name, referenced_type, referenced_owner from all_dependencies 
where name = 'MY_PROC' 

NAME REFERENCED_NAME     REFERENCED_TYPE REFERENCED_OWNER 
------------------------------------------------------------------------- 
MY_PROC STANDARD      PACKAGE   SYS 
MY_PROC USER_TABLES      SYNONYM   PUBLIC 
MY_PROC USER_OBJECTS     SYNONYM   PUBLIC 
MY_PROC ALL_TABLES      SYNONYM   PUBLIC 
MY_PROC ALL_OBJECTS      SYNONYM   PUBLIC 
MY_PROC SYS_STUB_FOR_PURITY_ANALYSIS PACKAGE   SYS 

所以REFERENCED_OWNER是對象的所有者的架構。

相關問題