我们已经创建了一个从Oracle 12.1 DB到Oracle APEX 21.2(Oracle 19c)的数据库链接,并将EXECUTE授予了一个包,将SELECT授予了包中调用的函数所使用的函数中列出的所有表。但是当运行调用包函数时,它说没有找到表或视图,并给出行号。但是,如果我从数据库链接中执行上述行,它可以正常工作。我尝试对所有表授予SELECT权限,并对从初始包调用的所有包授予EXECUTE权限。
sg2wtvxw1#
从包内部调用的表不包括内部模式名称,因此您必须为包中调用的每个表创建一个同义词。
create synonm table_name for schema_name.table_name
因为第二个模式正在执行来自源模式的包,所以它按原样运行代码,但是当它试图从表x中运行select * 时,它会说找不到,因为表x只存在于源模式中,所以我们必须指定source_schema.x,但是因为我们无法控制来自第二个模式的包的代码,所以处理它的一种方法是创建一个同义词来翻译
select * from x
到
select * from source_schema.x
1条答案
按热度按时间sg2wtvxw1#
从包内部调用的表不包括内部模式名称,因此您必须为包中调用的每个表创建一个同义词。
因为第二个模式正在执行来自源模式的包,所以它按原样运行代码,但是当它试图从表x中运行select * 时,它会说找不到,因为表x只存在于源模式中,所以我们必须指定source_schema.x,但是因为我们无法控制来自第二个模式的包的代码,所以处理它的一种方法是创建一个同义词来翻译
到