記事内に広告が含まれています。

【Oracle】ORA-00942の原因・解決方法

Oracleエラー「ORA-00942」の原因です。ありがちといえばありがちなエラーです。

【スポンサーリンク】

ORA-00942の原因

「ORA-00942 表またはビューが存在しません。」の原因は次の4つが考えられます。

  • 表(テーブル)やビューが存在しない
  • 表(テーブル)やビューの名前が間違っている
  • 表(テーブル)やビューが別スキーマにある
  • 表(テーブル)やビューにアクセスする権限が不足している

それぞれ順に原因を探って行きます。

表(テーブル)やビューが存在しない

SQL文のFROM句に書いているテーブル名が、自スキーマや他スキーマ関係なく、データベース上に、そもそも物理的に存在しないという場合に発生します。テーブル自体が存在するか確認してみましょう。

表(テーブル)やビューの名前が間違っている

「表(テーブル)やビューが存在しない」と同じ原因ですが、誤字のパターン。よーくFROM句を確認して下さい。テーブル名は合ってますか?テーブル結合するためにFROM句にテーブル並べまくって、そのうち1つのテーブル名が間違ってました、ということはよくあります。

表(テーブル)やビューが別スキーマにある

別スキーマにテーブルがあるのに、スキーマ名を指定せずにテーブル名を指定している場合にありがちなエラーです。例えばこんな感じです。

  • TAB_A:スキーマSCM_Aに存在する
  • TAB_B:スキーマSCM_Bに存在する
  • ログインしているユーザー:SCM_A
SELECT *
  FROM TAB_B
 WHERE COL_HOGE;

このまま実行するとエラーになります。ログインしているユーザーのスキーマとは別スキーマに存在するテーブルにSELECTを試みているためです。なので、スキーマを指定してSQL文を書いてあげます。

SELECT *
  FROM SCM_B.TAB_B
 WHERE COL_HOGE;

これでOKです。予防策として、自スキーマのテーブルにアクセスする時も、スキーマ名を指定するクセをつけておけば良いでしょう。

表(テーブル)やビューにアクセスする権限が不足している

ORA-00942でハマるパターンの原因です。別スキーマに対してアクセスする時に、ちゃんとスキーマ名も指定してるのにエラー出る…という場合、そもそも、ログインしているユーザーが別のスキーマにアクセスする権限が不足している可能性があります。

【スポンサーリンク】

編集後記

基本的にスペルミスやスキーマ指定していないなどが原因なので、落ち着いてSQL文を見直せば解決出来ると思います。

.