sql >> Database >  >> RDS >> Oracle

Hoe een openbaar synoniem correct te maken

Ik denk dat Justin op de goede weg is. Wat ik denk dat het eigenlijk betekent, is dat mydbowner.mytable niet bestaat.

Hier is een voorbeeld:

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

Ik denk dat Oracle probeert mytable op te lossen, er is geen mytable in mbobak-schema, dus zoekt het ernaar in PUBLIC, vindt het en ziet dat het naar mbobak.mytable verwijst. Maar mbobak.mytable bestaat niet, dus het zoekt naar mytable in PUBLIC, en daar is de lus.

En in feite, als u mytable maakt, verdwijnt de fout:

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, ik realiseer me dat dit niet helemaal logisch is, omdat, zodra het openbare synoniem is opgelost naar mbobak.mytable, en dat niet is gevonden, het naar mijn mening een fout zou moeten retourneren ORA-942 "tabel of weergave bestaat niet ", wat voor mij veel logischer is.

Maar zo lijkt het te werken.

QED

Ik hoop dat dat helpt.



  1. MySql - Hoofdlettergevoelig probleem van tabellen op verschillende servers

  2. Bewering in MySQL

  3. Hoe splits ik een waarde in meerdere rijen op de newline char in PostgreSQL?

  4. Hoe AJAX gebruiken om een ​​groot CSV-bestand te uploaden?