4

実行時にORA-00942(「テーブルまたはビューが存在しません」)が発生しました

select * from brunch

ただし、実行時にはそのような問題はありません

select * from joe.brunch

ここで何が問題なのか分かりますか?

4

3 に答える 3

9

修飾されていません。現在のセッションBRUNCHとは異なるオブジェクトを参照しています。JOE.BRUNCHそれを修正するには、いくつかのオプションがあります。

  1. パブリック シノニムを作成します。これにより、テーブルに対する権限を持つすべてのユーザーが、JOE.BRUNCHクエリを実行してテーブルにアクセスできるようになります。BRUNCH

    joe.brunch のパブリック シノニム ブランチを作成する

  2. プライベート シノニムを作成します。これにより、現在のユーザーのみがJOE.BRUNCHクエリによってテーブルにアクセスできるようになりますBRUNCH

    joe.brunch の類義語ブランチを作成

  3. 現在のセッションの現在のスキーマを に変更しますJOE。これにより、現在のセッションのすべての修飾されていない参照が、JOE現在のユーザーのスキーマではなくスキーマに解決されます。

    ALTER SESSION SET current_schema = JOE

于 2011-09-29T02:25:24.000 に答える
3

いくつかの原因が考えられます

1)ブランチと呼ばれるオブジェクト(テーブル、ビュー、プロシージャなど)が複数あります。オラクルは、あなたがどちらを参照しているのかわかりません。

2) 最も可能性の高い原因: テーブルは joe スキーマに存在しますが、joe.brunch オブジェクトの選択を許可されていない別のユーザーとして接続しています。

試す

joe.brunch の select を your_user に付与します

これを試して、ブランチという名前に一致するオブジェクトの数を確認してください

select * from all_objects where object_type in ('TABLE','VIEW') and object_name = 'brunch';

于 2011-09-29T01:50:19.587 に答える
0

私が参照していたテーブル (Flyway のschema_versionテーブル) が二重引用符で作成されていることがわかりました。

オラクルの言い分は次のとおりです。

引用識別子は、二重引用符(")で始まり、二重引用符で終わります。引用識別子を使用してスキーマ・オブジェクトに名前を付ける場合、そのオブジェクトを参照するときは常に二重引用符を使用する必要があります。

実際には、これらは機能しました:

SELECT * FROM MYSCHEMA."schema_version";
SELECT * FROM "MYSCHEMA"."schema_version";

これがなかった場合 (-> ORA-00942: テーブルまたはビューが存在しません):

SELECT * FROM MYSCHEMA.schema_version;
于 2016-12-05T05:21:17.210 に答える