В вашем примере FOOBAR
почти наверняка является публичным синонимом.Схема PUBLIC
отсутствует, но PUBLIC
указан как владелец общедоступного синонима.
Если я создаю новый общедоступный синоним
SQL> create public synonym pub_syn_emp
2 for scott.emp;
Synonym created.
, владелец этого синонима заканчиваетсябудучи PUBLIC
SQL> ed
Wrote file afiedt.buf
1 select object_name, owner, object_type
2 from dba_objects
3* where object_name = 'PUB_SYN_EMP'
SQL> /
OBJECT_NAME OWNER OBJECT_TYP
-------------------- ---------- ----------
PUB_SYN_EMP PUBLIC SYNONYM
Кроме того, пункт № 3 представляется неправильным.Если существует частный синоним, который указывает на несуществующий объект, и открытый синоним, который указывает на действительный объект, частный синоним по-прежнему имеет приоритет.Вы просто получите ошибку, когда Oracle попытается разрешить частный синоним к реальному объекту.
SQL> create synonym syn_emp for scott.no_such_table;
Synonym created.
SQL> create public synonym syn_emp for scott.emp;
Synonym created.
SQL> select * from syn_emp;
select * from syn_emp
*
ERROR at line 1:
ORA-00980: synonym translation is no longer valid