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_KEYToad の出力ウィンドウに書き込まれます。

ただし、プロシージャで本質的に同じコードを実行すると。

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

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 に答える