2011-09-16 85 views
2

我在執行Oracle中的存儲過程時遇到問題。Oracle存儲過程中的錯誤

下面是存儲過程:

CREATE OR REPLACE Procedure xxxlist 
    (yyyid in NUMBER)  
IS 
    xid number(6); 
    cursor c1 is select distinct xxxID from MXS.Y where YID=yyyid; 
BEGIN 
IF NOT c1%ISOPEN THEN 
    OPEN c1; 
END IF; 
LOOP 
    FETCH c1 into xid; 
    dbms_output.put_line(TO_CHAR(xid)); 
    EXIT WHEN c1%NOTFOUND; 
END LOOP; 
CLOSE c1; 
END; 

當我創建存儲過程,我得到以下錯誤:

Warning: Procedure created with compilation errors. 

我執行下面的命令給我提供更多的細節以上抽象的錯誤信息。

SHO ERR; 

我得到的詳情如下響應上面的命令:

Errors for PROCEDURE XXXLIST: 
LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
5/18  PL/SQL: SQL Statement ignored 
5/52  PL/SQL: ORA-00942: table or view does not exist 

現在,據我所知,沒有與表名或SQL查詢本身有問題。所以,我嘗試在PRODECURE之外單獨執行SQL查詢,以查看與表或查詢有什麼關係。

select distinct xxxID from MXS.Y where YID=yyyid; 

但是,我沒有發現上述查詢的任何問題。查詢運行良好,我得到正確的結果。

所以,我不知道爲什麼程序執行時遇到問題。誰能幫忙?

回答

7

一個可能的解釋是您正在運行的帳戶已被授予通過角色訪問表的權限。在Oracle中,通過角色授予的訪問權限會影響獨立的SQL語句,但不會影響PL/SQL中嵌入的SQL語句。

如果是這種情況,該表的所有者(或DBA)必須對錶選擇訪問直接授予您的帳戶:

GRANT SELECT ON mxs.y TO <account>;