10

これはかなりばかげたものですが、助けが必要です。

mydbowner が所有するテーブルがあります。mydbowner.mytable という名前です。次のコマンドを発行して、パブリック シノニムを作成しようとしました。

mydbowner.mytable のパブリック シノニム mytable を作成または置換します。

これを行うと、取得するテーブルにクエリを実行すると、次のようになります。

ORA-01775: シノニムのチェーンをループしています

問題なくこのシノニムを作成するにはどうすればよいですか。

4

2 に答える 2

14

ジャスティンは正しい方向に進んでいると思います。私が実際に意味していると思うのは、 mydbowner.mytable が存在しないということです。

次に例を示します。

SQL> conn mbobak
Enter password: 
Connected.
SQL> drop table mytable;
drop table mytable
           *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> create public synonym mytable for mbobak.mytable;

Synonym created.

SQL> select * from mytable;
select * from mytable
              *
ERROR at line 1:
ORA-01775: looping chain of synonyms

何が起こっているかというと、Oracle が mytable を解決しようとしていて、mbobak スキーマに mytable がないため、PUBLIC でそれを探し、それを見つけ、それが mbobak.mytable を指していることを確認します。しかし、mbobak.mytable が存在しないため、PUBLIC で mytable を検索し、ループが発生します。

実際、mytable を作成すると、エラーはなくなります。

SQL> create table mytable as select * from dual;

Table created.

SQL> select * from mytable;

D
-
X

1 row selected.

SQL> drop table mytable;

Table dropped.

SQL> select * from mytable;
select * from mytable
              *
ERROR at line 1:
ORA-01775: looping chain of synonyms

はい、パブリック シノニムが mbobak.mytable に解決され、それが見つからない場合、エラー ORA-942 "テーブルまたはビューが存在しません」、それは私にとってはるかに理にかなっています。

しかし、これはそれがどのように機能するかのようです。

QED

それが役立つことを願っています。

于 2012-01-24T22:45:18.690 に答える
7

あなたが得ているエラーはmydbowner.mytable、実際にはテーブルではないことを意味します。何が

SELECT object_type
  FROM all_objects
 WHERE owner = 'MYDBOWNER'
   AND object_name = 'MYTABLE'

戻る?

于 2012-01-24T22:23:42.520 に答える