oracle存储过程中的错误

oracle存储过程中的错误,oracle,stored-procedures,compilation,Oracle,Stored Procedures,Compilation,我在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 i

我在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;
但是,我没有发现上述查询有任何问题。查询运行良好,我得到了正确的结果


因此,我不知道为什么程序在执行时出现问题。有人能帮忙吗?

一种可能的解释是,您运行的帐户已通过角色被授予访问表的权限。在Oracle中,通过角色授予的访问权限会影响独立SQL语句,但不会影响嵌入PL/SQL中的SQL语句

如果是这种情况,表的所有者(或DBA)必须将表上的select访问权限直接授予您的帐户:

GRANT SELECT ON mxs.y TO <account>;
将mxs.y上的选择权授予;