ビューを作成するときに問題を診断する最初のステップは、selectを試すことです。 独自の部分。この場合でもORA-00942エラーが発生しますが、問題はクエリとアクセスの問題であり、ビューとは特に関係ありません。
ORA-00942:テーブルまたはビューが存在しませんを取得した場合 、次のいずれかの理由によるものです:
-
入力したテーブルまたはビューの名前は実際には存在しません。
-
スペルを確認してください。タイプミスがある可能性があります。
-
データベースが存在するデータベースに接続していますか?おそらく、あなたはそれを持っていないテストシステムを使用しています。
-
dba_objectsをクエリします テーブルが別のスキーマに存在するかどうかを確認します。 (dba_objectsを照会する権限がない場合は、all_objects表示する権限があるすべてのものが一覧表示されます。これは役立つ場合があります。)
-
-
実際には存在しますが、別のスキーマにあります。
その場合、2つの問題が考えられます:-
クエリを実行する権限がありません。テーブルの所有者は、
grant read on xyz必要があります (xyzの代わりに実際のテーブル名を使用してください )どちらかに-
あなた
-
public(すべての人がデータを見ることができるようにしたい場合は、常にお勧めできるとは限りません) -
役割 持っているもの(ただし、ロールは格納されたPL/SQLまたは
ビュー ただし、ロールのおかげで別のスキーマのテーブルをクエリできる可能性がありますが、それを使用するビューまたはプロシージャを作成することはできません。)
-
-
スキーマを指定する必要があります。
REGIONSにクエリを実行するとします。HRのテーブル ただし、SCOTTとして接続されています 。select * from regionsした場合SCOTT.REGIONSを検索します 、存在しません。これを修正するには、次のいずれかを実行します。-
hr.regionsを使用します クエリで明示的に。 -
スキーマで、
create or replace synonym regions for hr.regions;
これで、regionsを参照するたびに 、データベースは自動的にhr.regionsにリダイレクトされます 。 -
パブリックシノニムを作成する権限を持つスキーマ内:
create or replace public synonym regions for hr.regions;
これで、データベースに接続するすべての人がregionsへの参照を持つようになりますhr.regionsにリダイレクトされます 、これは必ずしも良い考えではありませんが、とにかく1つのオプションです。 -
alter session set current_schema = hr;
現在、オブジェクトの名前を解決するためのデフォルトのスキーマはHRです。 ログインしたものではありません。テーブルを所有するユーザーとは異なるユーザーとして常にログインするアプリケーションの場合、ログオントリガー後 したがって、これは常に設定されます。次に、regionsを参照するだけです。 スキーマや同義語を指定する必要はありません。
-
-