【发布时间】:2015-07-01 09:56:19
【问题描述】:
我有一个需要访问多个数据库的 PL/SQL 例程;我的开发环境是带有 Toad 的 Oracle XE 和 Eclipse。我已授予用户(在本例中为 SAMPLES)对另一个模式(在本例中为 CORE.SAMPLE)的选择权限,以便查询,例如:
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 表具有选择权限的 SAMPLES 用户身份运行。
有人可以帮忙解释为什么会这样吗?谢谢。
尼尔
【问题讨论】:
-
您是如何将您的 core.sample 表上的选择授予示例用户的?是直接授予,还是授予角色,然后授予示例用户?
-
有趣的是,我最初授予了一个对简单 sql 语句不起作用的角色,所以我直接授予它并且简单的 sql 语句起作用了。
-
您可以尝试创建同义词并检查它是否适合您。
标签: oracle stored-procedures plsql