これはかなりばかげていますが、助けが必要です。
Mydbownerが所有するテーブルがあります。 mydbowner.mytableという名前です。次のコマンドを発行して、パブリックシノニムを作成しようとしました。
CREATE OR REPLACE PUBLIC SYNONYM mytable FOR mydbowner.mytable;
これを行うと、次のようなテーブルにクエリを実行します。
ORA-01775:シノニムのループ・チェーン
このシノニムを問題なく作成するにはどうすればよいですか。
ジャスティンは正しい方向に進んでいると思います。実際には、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
お役に立てば幸いです。
あなたが得ているエラーは、mydbowner.mytable
は実際にはテーブルではありません。なに
SELECT object_type
FROM all_objects
WHERE owner = 'MYDBOWNER'
AND object_name = 'MYTABLE'
戻る?