web-dev-qa-db-ja.com

SQLDeveloper:存在するテーブルを記述できません

テーブルがあります。それをMYTABLEと呼びましょう。

SQLDeveloperでは、次のようにしてテーブル内のデータを確認できます。

SELECT * FROM MYTABLE

ただし、DESC MYTABLE、それは私にエラーを与えます:

エラー:オブジェクトMYTABLEが存在しません。

Sqlplusから同じことを試してもエラーは発生せず、テーブルの列のリストが表示されます。

私はチェックした dba_all_tablesとテーブルの行があります。

select * from dba_all_tables where table_name = 'MYTABLE';

期待どおりに1行を返します。

何が欠けているかについてのアイデアはありますか?

コマンドは別のテーブル(MYSCHEMA.MYTABLE2)、SQL開発者のバグではない可能性があります。

同じテーブルがいくつかのスキーマに存在します:

select owner, object_type, count(*) from dba_objects where object_name='MYTABLE' and owner='MYSCHEMA' group by owner, object_type;

MYSCHEMA    TABLE SUBPARTITION  128 
MYSCHEMA    TABLE PARTITION 16
MYSCHEMA    TABLE   1

残念ながら、これらのテーブルは作業中のスキーマに既に存在するため、これを個別に再現するための一連の手順を提供することはできません。現時点での私の推測では、テーブルの作成中にずっと前に問題が発生しており、会社のSCCSが変更されたために戻って実行されたソースコードを確認することはできません。

MYTABLEは同義語またはmviewではありません。

4
user2761865

このエラーは、2つのオブジェクトが同じ名前で作成された場合に発生することがあります。この問題は、バージョン17.4.1.054以降で発生します。

たとえば、テーブルとトリガーが同じ名前を共有している場合:

create table mytable(a number);

create or replace trigger mytable before insert on mytable for each row
begin
    null;
end;
/

次に、コマンドdesc MYTABLE;は次のエラーで失敗します:

ERROR:                               
------------------------------------ 
ERROR: object MYTABLE does not exist 

オブジェクト名の1つを変更するか、テーブル名を二重引用符で囲むことにより、問題を回避できます。

desc "MYTABLE";
3
Jon Heller

これは、MYTABLEがシノニムのシノニムであるためである必要があります。SQLDeveloper 4.1.3ではサポートされていません(バグである必要があります)。 参考

User3、user2、user1という3人のユーザーがいます

SQL> conn user3/user3
Connected.
SQL> create table mytable(id number);

Table created.

SQL> grant select on mytable to user2 with grant option;  

Grant succeeded.

SQL> conn user2/user2
Connected.
SQL> create synonym mytable for user3.mytable;

Synonym created.

SQL> grant select on mytable to user1;

Grant succeeded.

SQL> conn user1/user1
Connected.

SQL>  create synonym mytable for user2.mytable;

Synonym created.

SQL> desc mytable;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER

SQL> conn / as sysdba       
Connected.
SQL> select table_name from dba_all_tables where table_name='MYTABLE';

TABLE_NAME
------------------------------
MYTABLE

SQL> select owner from dba_tables where table_name='MYTABLE';

OWNER
------------------------------
USER3

それをSQL Developerで説明してみましょう。

desc mytable;

ERROR: object MYTABLE does not exist 
3
JSapkota

サブパーティションのあるテーブルで同じ問題が発生しています。他のサブパーティションテーブルは問題ありません。 TOADでdescを正常に実行できます。

SQLDeveloperのEdge-caseバグのように見えます。

1
Jonny Wilkinson

これは、テーブルにサブパーティションがあるためだと思います。発生したエラーはOracleエラーではありません(つまり、ORAエラーではありません)。これはツール固有のエラーのようです。

0
Deep Verma