【问题标题】:Errors in oracle stored procedureoracle存储过程中的错误
【发布时间】:2011-09-16 13:18:07
【问题描述】:

我在 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 stored-procedures compilation


    【解决方案1】:

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

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

    GRANT SELECT ON mxs.y TO <account>;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-02
      • 2016-08-27
      • 2015-05-02
      • 2012-11-24
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多