2015-07-01 67 views
1

我有一個需要訪問多個數據庫的PL/SQL例程;我的開發環境是帶有Toad的Eclipse XE &。我已授予的其他模式(在這種情況下CORE.SAMPLE)select權限給用戶(在這種情況下,樣本),這樣的查詢,如:PLSQL訪問不同的架構

SELECT count(*) from core.sample; 

在運行時爲用戶作品樣本就好了。不過我再有一個包的程序這樣:

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; 
/

我使用的蟾蜍和蟾蜍抱怨CORE.SAMPLE不可用,當我嘗試編譯它在Oracle數據庫(在樣本模式)它不起作用。我得到臭名昭着的'PL/SQL:ORA-00942:表或視圖不存在',但我知道SAMPLES用戶可以訪問core.sample,因爲原始SQL語句可以工作,所以爲什麼不存儲這個存儲過程。這是我如何調用存儲過程來測試:

begin 
    CORE_SEARCH.SEARCH_BARCODE('test'); 
end; 

再次,這是運行誰有權對CORE.SAMPLE表的SELECT權限樣本用戶。

有人可以請幫助,爲什麼發生這種情況;謝謝。

尼爾

+0

您是如何將您的core.sample表上的選擇授予樣本用戶的?是直接授予還是授予角色,然後授予樣本用戶? – Boneist

+0

有趣的是,我最初授予了一個在簡單的sql語句中不起作用的角色,所以我直接授予它並使用簡單的sql語句。 –

+0

你可以嘗試創建同義詞並檢查它是否適合你。 –

回答

0

該問題已通過刪除以前授予的角色來解決,該角色賦予了該表的select權限,並且該用戶也對該表具有選擇權限。只是用戶工作正常。

0

假設你從樣品中調用該過程需要添加的包的所有者調用它時(假設這就是CORE):

CORE.CORE_SEARCH.SEARCH_BARCODE(「試驗」);

+0

它由樣品擁有 –