2

对于 PL-SQL 人员来说,这应该很容易。在将此问题标记为重复问题之前,请确保虽然错误消息可能很常见,但潜在问题与前一个问题相同。如果是这样,请提供指向已解决的确切逻辑重复问题的链接。一世

当我登录到我的架构时,我执行以下 PL-SQL 代码:

DECLARE
  v_rpt_per_key NUMBER := 0;
BEGIN

  SELECT MAX(rpt_per_key)
  INTO v_rpt_per_key
  FROM rxfinods_sta.hd_invc_ln_item_dtl_stat;

  dbms_output.PUT_LINE('v_RPT_PER_KEY=' || v_rpt_per_key);

END;
/

查询成功执行,最大值RPT_PER_KEY被写入 Toad 的输出窗口。

但是,当我在一个过程中执行基本相同的代码时。

CREATE OR REPLACE PROCEDURE hd_purge_test
IS
  v_rpt_per_key NUMBER := 0;
  BEGIN

    SELECT MAX(stat.rpt_per_key)
    INTO v_rpt_per_key
    FROM rxfinods_sta.hd_invc_ln_item_dtl_stat stat;
    --HD_INVC_LN_ITEM_DTL_STAT        

    dbms_output.PUT_LINE('v_RPT_PER_KEY=' || v_rpt_per_key);

    EXCEPTION
    WHEN NO_DATA_FOUND THEN
      NULL;
    WHEN OTHERS THEN
    -- Consider logging the error and then re-raise
      RAISE;
  END hd_purge_test;

我收到表不存在的错误。

[Warning] ORA-24344: success with compilation error
14/21   PL/SQL: ORA-00942: table or view does not exist
9/4     PL/SQL: SQL Statement ignored
 (1: 0): Warning: compiled but with compilation errors

由于我能够在使用相同的凭据时查询表,这证明我的 ID 有权从表中进行选择。难道我不应该有权从我在相同登录模式下创建的存储过程中查询表吗?是否需要执行一些额外的赠款?

注意:如果我从登录模式中的任何表中进行选择,则该过程编译成功。

4

4 回答 4

5

听起来像是通过角色授予的选择权限的问题,而不是直接授予架构。请参阅ORA-00942:表或视图不存在(在单独的 sql 时有效,但在 oracle 函数内无效)

于 2015-06-15T16:44:09.230 回答
1

检查您的用户是否具有访问表的直接授权,而不是“授予选择到 xxx_role”

于 2015-06-15T16:44:18.713 回答
1

您可以执行以下命令,然后再次编译您的程序:

--GRANT ALL ON <YOUR TABLE NAME> TO <YOUR USER NAME>;

GRANT ALL ON RXFINODS_STA.HD_INVC_LN_ITEM_DTL_STAT TO chadD;

这将授予对象的完全权限。

于 2015-06-15T20:13:36.570 回答
0

或者你可以这样做:

CREATE OR REPLACE PROCEDURE hd_purge_test

AUTHID CURRENT_USER

IS
  v_rpt_per_key NUMBER := 0;
  BEGIN

    SELECT MAX(stat.rpt_per_key)
    INTO v_rpt_per_key
    FROM rxfinods_sta.hd_invc_ln_item_dtl_stat stat;
    --HD_INVC_LN_ITEM_DTL_STAT        

    dbms_output.PUT_LINE('v_RPT_PER_KEY=' || v_rpt_per_key);

    EXCEPTION
    WHEN NO_DATA_FOUND THEN
      NULL;
    WHEN OTHERS THEN
    -- Consider logging the error and then re-raise
      RAISE;
  END hd_purge_test;
于 2017-05-17T15:30:54.507 回答