【问题标题】:Find all objects inside a Package or Stored proc查找包或存储过程中的所有对象
【发布时间】:2014-10-25 11:08:32
【问题描述】:

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

假设我有如下程序,

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 的数据。所以这里 Payment 和 checkout 是不同的模式。

我的问题是,

有没有一种方法可以识别以获取在过程或包中使用的其他模式的列表?

请帮忙。

【问题讨论】:

  • 我得到了答案 SELECT * FROM ALL_DEPENDENCIES WHERE OWNER = USER AND NAME= 'PROCEDURE1' AND REFERENCED_OWNER NOT IN ('SYS', USER);

标签: sql oracle plsql oracle11g plsqldeveloper


【解决方案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 是对象所有者的架构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2014-09-01
    相关资源
    最近更新 更多