3

私のプログラムでは、Oracle 11g データベースのスキーマにアクセスする必要があります。次のようなクエリを使用して、テーブルのリストを取得しようとしています。

SELECT t.TABLE_NAME, t.OWNER
FROM ALL_TABLES t
WHERE t.DROPPED = 'NO'
ORDER BY t.TABLE_NAME

クエリが機能し、テーブルのリストが返されます。残念ながら、返されたテーブル名を使用していくつかのテーブルをクエリすると、次のエラーが発生します。

ORA-00942: 表またはビューが存在しません

このエラーの原因は何ですか? それは特権にかかっているのでしょうか?

別の問題で、同じ名前の 2 つまたはテーブルが潜在的に存在する可能性があるかどうか、および 2 つをどのように区別できるかについても少し混乱しています。これに気を付ける必要はありますか?

.NET で Oracle.DataAccess プロバイダーを使用してデータベースに接続しています。これはリモート サーバーであり、残念ながらアクセスが非常に限られています。

4

3 に答える 3

6

それは特権にかかっている可能性があります。ただし、テーブルが別のスキーマにあり、そのシノニムがないことが原因である可能性があります。テーブル名を所有者で修飾すると機能しますか? つまり、代わりに [owner].[table_name] から選択しますか?

于 2010-09-23T11:39:11.960 に答える
3

ALL_TABLESビューにアクセスできるからといって、このビューを介して取得したテーブルを実際に選択できるわけではありません。それらを選択するには、テーブルで適切な許可選択が必要です。

2つのテーブルは、異なるスキーマに属している限り、同じ名前にすることができます(スコープは実際には単なるテーブルよりも広く、スキーマに同じ名前の2つのオブジェクト(テーブル、ビュー...)を含めることはできません)

于 2010-09-23T11:25:35.217 に答える
0

はい、これはセキュリティ機能です。テーブルから SELECT する権限がない場合、Oracle は通常、それが存在することを確認することさえしません (許可されていない限り、通常のユーザーは select from ALL_ 内のものを見ることができません)。 DBAによる)。

于 2010-09-23T17:26:21.597 に答える