查找Package或Stored proc中的所有对象

时间:2014-09-01 08:53:20

标签: sql oracle plsql oracle11g plsqldeveloper

我不确定这个问题是否有意义。但想到这里问这个。

假设我有以下程序,

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

在上面的代码中。 proc在模式“Order”中存在,因为您可以看到此proc正在使用Payment和Checkout的数据。所以付款和结账是不同的架构。

我的问题是,

有没有办法识别以获取程序或包中使用的模式列表?

请帮忙。

1 个答案:

答案 0 :(得分: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是作为对象所有者的架构。