我在架构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背景。
答案 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内核之外并未正式提供。