Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie man ein öffentliches Synonym richtig macht

Ich denke Justin ist auf dem richtigen Weg. Was ich denke, bedeutet es eigentlich, dass mydbowner.mytable nicht existiert.

Hier ist ein Beispiel:

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

Ich denke, was passiert, ist, dass Oracle versucht, mytable aufzulösen, es gibt kein mytable im mbobak-Schema, also sucht es in PUBLIC danach, findet es und sieht, dass es auf mbobak.mytable zeigt. Aber mbobak.mytable existiert nicht, also sucht es in PUBLIC nach mytable, und da ist die Schleife.

Und tatsächlich, wenn Sie mytable erstellen, verschwindet der Fehler:

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

Ja, mir ist klar, dass das nicht wirklich sinnvoll ist, denn sobald das öffentliche Synonym in mbobak.mytable aufgelöst wurde und das nicht gefunden wurde, sollte es meiner Meinung nach einen Fehler ORA-942 "Tabelle oder Ansicht existiert nicht" zurückgeben ", was für mich viel sinnvoller ist.

Aber so scheint es zu funktionieren.

QED

Hoffe das hilft.