如何查找表的列级引用?

时间:2014-07-02 21:51:33

标签: oracle oracle11g

我在架构IdMap下有一个名为ABC_OWNER的表。我有一个名为sp_MyProcedure的存储过程,它有一个查询,这是在模式XYZ_OWNER中:

SELECT M.IssueId
FROM IdMap M Join Product P on M.IssueId=P.IssueId

我想编写一个查询,告诉我对IdMap的所有引用,特别是引用了哪些列。因此,此脚本的结果将告诉我存储过程IssueID正在引用表IdMap的{​​{1}}。

我尝试在sp_MyProcedure表格和all_dependencies中查询,但我不知道如何在列级别进行此操作。我来自SQL Server背景。

2 个答案:

答案 0 :(得分:2)

尝试Rob Van Wijk的DBA_DEPENDENCY_COLUMNS

create user abc_owner identified by abc_owner;
create table abc_owner.IdMap(IssueId number, a number);
create table abc_owner.Product(IssueId number, a number);

create user xyz_owner identified by xyz_owner;
grant select on abc_owner.IdMap to xyz_owner;
grant select on abc_owner.Product to xyz_owner;

create or replace procedure xyz_owner.sp_myProcedure is
    v_issue_id number;
begin
    SELECT M.IssueId
    into v_issue_id
    FROM abc_owner.IdMap M Join abc_owner.Product P on M.IssueId=P.IssueId;
end;
/

select name, referenced_name, referenced_column
from sys.dba_dependency_columns
where owner in ('ABC_OWNER', 'XYZ_OWNER');


NAME            REFERENCED_NAME  REFERENCED_COLUMN
----            ---------------  -----------
SP_MYPROCEDURE  PRODUCT          ISSUEID
SP_MYPROCEDURE  IDMAP            ISSUEID

答案 1 :(得分:1)

此时Oracle无法做到这一点。由于11g oracle认为列使用信息使对象无效,但据我所知,这些信息在Oracle内核之外并未正式提供。