sql >> Database teknologi >  >> RDS >> Oracle

Sådan laver du et offentligt synonym korrekt

Jeg tror, ​​at Justin er på rette vej. Hvad jeg tror, ​​det faktisk betyder, er, at mydbowner.mytable ikke eksisterer.

Her er et eksempel:

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

Jeg tror, ​​at det, der sker, er, at Oracle forsøger at løse mytable, der er ingen mytable i mbobak-skemaet, så det leder efter det i PUBLIC, det finder det og ser, at det peger på mbobak.mytable. Men mbobak.mytable eksisterer ikke, så den leder efter mytable i PUBLIC, og der er løkken.

Og faktisk, hvis du opretter mytable, forsvinder fejlen:

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, jeg er klar over, at det ikke rigtig giver mening, da når først det offentlige synonym blev løst til mbobak.mytable, og det ikke er fundet, forekommer det mig, det burde returnere en fejl ORA-942 "tabel eller visning eksisterer ikke ", hvilket giver langt mere mening for mig.

Men det ser ud til at være sådan, det virker.

QED

Håber det hjælper.



  1. Hvordan kan du bestemme, hvor meget diskplads en bestemt MySQL-tabel optager?

  2. Android og Mysql Database Kommunikation

  3. PL/SQL (Sådan beregnes den første og sidste dag i ethvert kvartal af ethvert år)

  4. JSON fra twitter API indeholder \u2019