如何在从不同架构调用过程时查找 oracle 中的所有嵌套依赖对象



我有2个模式 - A和B。我在架构 A 中的包中有一个过程,我想从架构 B 引用它。我已经在 A 架构中为这个包提供了授权,并在架构 B 中为它创建了一个同义词。但是该过程在彼此内部调用一系列过程。因此,当我运行该过程时,它给出的表/视图不存在。我试图找出依赖对象,并为其中的几个对象授予和创建同义词。但似乎依赖对象的列表太长了。所以,我只是想知道是否有任何方法,我可以一次性找到我需要授予并创建同义词的所有对象,而不是运行并逐个检查..

感谢您的帮助。

艾卜哈。

我可以想到一些可能导致此问题的不同拓扑 - 我将首先从我能想到的最简单的解释开始。

如果架构 A 上有表和代码(包(。

给定以下测试对象

create table tst_table(tst_val int); 
create or replace package tst_pkg as 
procedure tst_insert; 
end tst_pkg; 
/
create or replace package body tst_pkg  as 
procedure tst_insert as
begin
insert into tst_table (tst_val) values (44); 
end; 
end tst_pkg; 
/

您可以将执行tst_pkg授予其他用户(即架构 B(,其他用户将能够使用tst_insert过程 - 如下所示

SQL> exec iasim.tst_pkg.tst_insert;
PL/SQL procedure successfully completed.

但是 - 如果你有这个拓扑,你应该碰巧使用"authid current_user"来定义你的包 - 那么授予的执行就不再足够了。

如果将包定义更改为

create or replace package tst_pkg authid current_user as 
procedure tst_insert; 
end tst_pkg; 
/

当您尝试执行该过程时,您将收到此错误

SQL> exec iasim.tst_pkg.tst_insert;
BEGIN iasim.tst_pkg.tst_insert; END;
*
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at "IASIM.TST_PKG", line 4
ORA-06512: at line 1

所以 - 如果是这种情况,你应该编译你的包而不用"authid current_user"并授予用户执行权限 - 这是将行插入我的例子所需的权限tst_table如果它通过 test_pkg 中的过程完成。

请让我知道这是否有帮助,或者您是否安排了不同的作品。

最新更新