Oracle数据库链接到一个包,说明找不到表

zpf6vheq  于 2023-06-22  发布在  Oracle
关注(0)|答案(1)|浏览(161)

我们已经创建了一个从Oracle 12.1 DB到Oracle APEX 21.2(Oracle 19c)的数据库链接,并将EXECUTE授予了一个包,将SELECT授予了包中调用的函数所使用的函数中列出的所有表。
但是当运行调用包函数时,它说没有找到表或视图,并给出行号。但是,如果我从数据库链接中执行上述行,它可以正常工作。
我尝试对所有表授予SELECT权限,并对从初始包调用的所有包授予EXECUTE权限。

sg2wtvxw

sg2wtvxw1#

从包内部调用的表不包括内部模式名称,因此您必须为包中调用的每个表创建一个同义词。

create synonm table_name for schema_name.table_name

因为第二个模式正在执行来自源模式的包,所以它按原样运行代码,但是当它试图从表x中运行select * 时,它会说找不到,因为表x只存在于源模式中,所以我们必须指定source_schema.x,但是因为我们无法控制来自第二个模式的包的代码,所以处理它的一种方法是创建一个同义词来翻译

select * from x

select * from source_schema.x

相关问题