sql >> Databáze >  >> RDS >> Oracle

Jak správně vytvořit veřejné synonymum

Myslím, že Justin je na správné cestě. Myslím, že to ve skutečnosti znamená, že mydbowner.mytable neexistuje.

Zde je příklad:

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

Myslím, že se děje to, že se Oracle pokouší vyřešit mytable, ve schématu mbobak žádná mytable není, takže ji hledá ve PUBLIC, najde ji a vidí, že ukazuje na mbobak.mytable. Ale mbobak.mytable neexistuje, takže hledá mytable v PUBLIC a tam je smyčka.

A ve skutečnosti, pokud vytvoříte mytable, chyba zmizí:

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

Ano, uvědomuji si, že to ve skutečnosti nedává úplně smysl, protože jakmile se veřejné synonymum vyřeší na mbobak.mytable, a ten nebyl nalezen, zdá se mi, mělo by vrátit chybu ORA-942 „tabulka nebo pohled neexistuje “, což mi dává mnohem větší smysl.

Ale zdá se, že to tak funguje.

QED

Doufám, že to pomůže.



  1. Použití Postgresql s Grails:Chybějící sekvence nebo tabulka:hibernate_sequence

  2. výběr řádku z mysql, pokud se id shoduje

  3. SQL dotaz, který odpovídá jednomu z více řetězců

  4. Přidání dvou stejných cizích klíčů do jednoho modelu jako dvou různých polí v sequelize