開発時に発生するエラー

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 (+ UPDATEDELETE 、etc) 権限を個別に付与する。実行時の権限確認はコストゼロではない。そのため、一般的には必要となる権限を個別に付与する。

 


 

類似するエラー

 

一覧ページへ戻る

OTN (Oracle Technology Network)によるエラーメッセージによる情報だけでは、対処に困ったエラーについてのプラクティスです。
ベスト・プラクティスというわけではないので、書いてあることに固執しないで広い視野でエラー対応してください。

ORA-00942の関連トピックス

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ 会員制(無料)の公式技術サイト