ビューを作成するときに問題を診断する最初のステップは、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
を参照するだけです。 スキーマや同義語を指定する必要はありません。
-
-