PLSQL访问不同的架构

时间:2015-07-01 09:56:20

标签: oracle stored-procedures plsql

我有一个需要访问多个数据库的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用户运行。

有人可以帮助解释为什么会发生这种情况;感谢。

尼尔

2 个答案:

答案 0 :(得分:0)

假设您正在从SAMPLES调用该过程,您需要在调用它时添加该包的所有者(假设为CORE):

CORE.CORE_SEARCH.SEARCH_BARCODE( '试验');

答案 1 :(得分:0)

通过删除先前授予的角色解决了该问题,该角色在表上提供了select权限,并且用户也对表具有select权限。只是用户工作正常。