2012-01-24 11 views
8

Esto es bastante tonto, pero necesito ayuda.Cómo hacer correctamente un sinónimo público

Tengo una mesa propiedad de mydbowner. Se llama mydbowner.mytable. Traté de hacer un sinónimo público al emitir el comando:

CREAR O REEMPLAZAR el sintetizador PÚBLICO mytable PARA mydbowner.mytable;

Cuando hago esto, y consultar la tabla consigo:

ORA-01775: la cadena de bucle de sinónimos

? ¿Cómo hago este sinónimo sin tener el problema.

+0

Las dos respuestas son correctas. Hice algún tipo de error tipográfico y el sinónimo no se refirió a nada. – Joe

Respuesta

12

Creo que Justin está en el camino correcto. Lo que creo que realmente significa es que mydbowner.mytable no existe.

He aquí un ejemplo:

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 

Creo que lo que está sucediendo es que Oracle intenta resolver mitabla, no hay mitabla en el esquema mbobak, para que se vea por ello en público, lo encuentra, y ve que apunta a mbobak.mytable. Pero, mbobak.mytable no existe, por lo tanto, busca mytable en PUBLIC, y está el bucle.

Y de hecho, si se crea mitabla, el error desaparece:

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í, me doy cuenta de que en realidad no del todo tiene sentido, ya que, una vez que el sinónimo público resolvió mbobak.mytable, y eso no se encuentra, me parece, debería devolver un error ORA-942 "tabla o vista no existe", lo cual tiene mucho más sentido para mí.

Pero, parece ser así como funciona.

QED

Espero que ayude.

6

El error que está recibiendo implica que mydbowner.mytable no es, de hecho, una tabla. ¿Qué significa

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

return?

Cuestiones relacionadas