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文を見直せば解決出来ると思います。
.