2012-01-24 6 views
8

Questo è piuttosto stupido, ma ho bisogno di aiuto.Come fare correttamente un sinonimo pubblico

Ho un tavolo di proprietà di miobagno. Si chiama mydbowner.mytable. Ho provato a fare un sinonimo pubblico con il comando:

CREATE OR REPLACE PUBBLICO MyTable sinonimo di mydbowner.mytable;

Quando faccio questo, e mi interrogo la tabella ottengo:

ORA-01775: looping catena di sinonimi

come faccio a fare questo sinonimo senza avere il problema.

+0

Le due risposte sono corrette. Ho fatto una specie di errore di battitura e il sinonimo non si riferiva a nulla. – Joe

risposta

12

Penso che Justin sia sulla strada giusta. Quello che penso in realtà significa è 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 tenta di risolvere MyTable, non v'è alcun MyTable nello schema mbobak, in modo che appaia in in pubblico, lo trova, e vede che punta a mbobak.mytable. Ma, mbobak.mytable non esiste, quindi, cerca mytable in PUBLIC, e c'è il ciclo.

E in effetti, se si crea MyTable, l'errore va via:

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 in realtà non del tutto ha senso, in quanto, una volta che il sinonimo pubblico ha deliberato di mbobak.mytable, e questo non è stato trovato, mi sembra, dovrebbe restituire un errore ORA-942 "la tabella o la vista non esiste", che per me ha molto più senso.

Ma questo sembra essere il modo in cui funziona.

QED

Spero che questo aiuti.

6

L'errore che stai ricevendo implica che mydbowner.mytable non è, in effetti, una tabella. Cosa significa

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

ritorno?