我有一个需要访问多个数据库的PL / SQL例程;我的开发环境是Oracle XE& Eclipse与Toad。我已经在其他模式(在本例中为CORE.SAMPLE)上向用户授予了select权限(在本例中为SAMPLES),以便查询如下:
SELECT count(*) from core.sample;
以用户SAMPLES运行时运行正常。然而,我在包中有一个程序:
CREATE OR REPLACE PACKAGE BODY CORE_SEARCH
AS
FUNCTION search_barcode (barcode IN VARCHAR2)
RETURN BOOLEAN
IS
num_lines INT;
BEGIN
SELECT COUNT (*)
INTO num_lines
FROM CORE.SAMPLE s
WHERE s.barcode = barcode;
RETURN num_lines > 0;
END;
END;
/
我使用TOAD和toad抱怨CORE.SAMPLE不可用,当我尝试在Oracle DB中编译它时(在SAMPLES模式中)它不起作用。我得到臭名昭着的PL / SQL:ORA-00942:表或视图不存在'但我知道SAMPLES用户可以访问core.sample,因为原始SQL语句可以工作,所以为什么不存储过程。这就是我调用存储过程来测试的方法:
begin
CORE_SEARCH.SEARCH_BARCODE('test');
end;
同样,它作为对CORE.SAMPLE表具有select权限的SAMPLES用户运行。
有人可以帮助解释为什么会发生这种情况;感谢。
尼尔
答案 0 :(得分:0)
假设您正在从SAMPLES调用该过程,您需要在调用它时添加该包的所有者(假设为CORE):
CORE.CORE_SEARCH.SEARCH_BARCODE( '试验');
答案 1 :(得分:0)
通过删除先前授予的角色解决了该问题,该角色在表上提供了select权限,并且用户也对表具有select权限。只是用户工作正常。