これは、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 がテーブルから選択するためのアクセス権を持っていることを証明しています。同じログオン スキーマで作成したストアド プロシージャからテーブルをクエリする権利も必要ではないですか? 追加の許可を実行する必要がありますか?
注: ログオンしているスキーマの任意のテーブルから選択すると、プロシージャは正常にコンパイルされます。