Oracle
 sql >> Database >  >> RDS >> Oracle

Come rendere correttamente un sinonimo pubblico

Penso che Justin sia sulla strada giusta. Quello che penso significhi effettivamente è che mydbowner.mytable non esiste.

Ecco un esempio:

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

Penso che quello che sta succedendo è che Oracle cerca di risolvere mytable, non c'è mytable nello schema mbobak, quindi lo cerca in PUBLIC, lo trova e vede che punta a mbobak.mytable. Ma mbobak.mytable non esiste, quindi cerca mytable in PUBLIC e c'è il loop.

E infatti, se crei mytable, l'errore scompare:

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

Sì, mi rendo conto che non ha del tutto senso, poiché, una volta che il sinonimo pubblico ha risolto mbobak.mytable, e non è stato trovato, mi sembra, dovrebbe restituire un errore ORA-942 "tabella o vista non esiste ", che per me ha molto più senso.

Ma sembra che funzioni così.

QED

Spero di esserti stato d'aiuto.