開発時に発生するエラー
ORA-00942: 表またはビューが存在しません。
PL/SQL 使用時に発生する場合
PL/SQL とロールの関係について正しい認識と設定を行なっているか確認する。
例えば ユーザー hoo (DBAロール) 、ユーザー scott がいるとした場合に
# sqlplus hoo/xxx
SQL> select empno from scott.emp ;
...
これは何の問題もなく実行される。(DBA ロールの SELECT ANY TABLE 権限)
しかし 以下の PL/SQL はコンパイルエラーになる
以下のような シノニム を宣言して hoo.emp シノニムにアクセスしても同様。
CREATE SYNONYM hoo.emp FOR scott.emp ;
SQL> CREATE OR REPLACE FUNCTION HOO.GET_EMPNO
2 RETURN NUMBER IS
4 vEmpNo NUMBER;
5 BEGIN
6 SELECT empno INTO vEmpNo FROM scott.emp WHERE ROWNUM <= 1;
7 RETURN vEmpNo;
8 END;
9 /
...
LINE/COL ERROR
-------- -----------------------------------------------------------------
6/2 PL/SQL: SQL Statement ignored
6/37 PL/SQL: ORA-00942: 表またはビューが存在しません。
対応
PL/SQL における 定義者権限と実行者権限 について理解した上で AUTHID CURRENT_USER を設置するか、
GRANT SELECT ON scott.emp TO hoo ;
による SELECT (+ UPDATE 、DELETE 、etc) 権限を個別に付与する。実行時の権限確認はコストゼロではない。そのため、一般的には必要となる権限を個別に付与する。
類似するエラー
一覧ページへ戻る
OTN (Oracle Technology Network)によるエラーメッセージによる情報だけでは、対処に困ったエラーについてのプラクティスです。
ベスト・プラクティスというわけではないので、書いてあることに固執しないで広い視野でエラー対応してください。