2012-01-24 20 views
8

To jest całkiem głupie, ale potrzebuję pomocy.Jak poprawnie utworzyć publiczny synonim

Mam stolik należący do mydbowner. Nazywa się mydbowner.mytable. Próbowałem utworzyć publiczny synonim, wydając polecenie:

UTWÓRZ LUB WYMIENIAJ SYNONYM PUBLICZNY mytable FOR mydbowner.mytable;

Kiedy to zrobić, a ja kwerendy tabeli uzyskać:

ORA-01775: zapętlenie łańcucha synonimów

Jak zrobić to synonim bez problemu.

+0

Dwie odpowiedzi są prawidłowe. Zrobiłem coś w rodzaju literówki, a synonim nic nie wskazywał. – Joe

Odpowiedz

12

Myślę, że Justin jest na dobrej drodze. Myślę, że faktycznie oznacza to, że mydbowner.mytable nie istnieje.

Oto przykład:

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 

myślę, co się dzieje jest to, że Oracle stara się rozwiązać mojatabela, nie ma mojatabela w mbobak schematu, więc wygląda na to publicznie, to znajdzie go i widzi, że wskazuje na mbobak.mytable. Jednak plik mbobak.mytable nie istnieje, więc szuka możliwości mytable w PUBLIC, a tam jest pętla.

I rzeczywiście, jeśli tworzysz mojatabela, błąd odchodzi:

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 

Tak, zdaję sobie sprawę, że tak naprawdę nie do końca sensowne, jak kiedyś synonimem publicznego postanowili mbobak.mytable, i tego nie znaleziono, wydaje mi się, że powinien zwrócić błąd ORA-942 "tabela lub widok nie istnieje", co ma dla mnie dużo więcej sensu.

Ale wygląda na to, że to działa.

QED

Nadzieję, że pomaga.

6

Błąd, który otrzymujesz, oznacza, że ​​mydbowner.mytable nie jest, w rzeczywistości tabelą. Co zwraca funkcja powrotu?

Powiązane problemy