Выбор синонимов Oracle - PullRequest
1 голос
/ 07 ноября 2008

Попал в ситуацию, когда в схеме у меня есть таблица, скажем, таблица ACTION, а я получил синоним ACTION, который ссылается на другую таблицу для другой схемы.

Теперь, когда я запускаю запрос

выберите * из ДЕЙСТВИЯ

будет выбирать записи из таблицы, но не синоним.

В любом случае, я могу выбрать из синонима И таблицы оба вместе?

Thanx

Ответы [ 3 ]

5 голосов
/ 07 ноября 2008

Я не думаю, что ваш синоним ACTION находится в той же схеме, что и ваша таблица ACTION, поскольку это не разрешено в Oracle. Скорее всего, ваш синоним ACTION находится в другой схеме, возможно, это синоним PUBLIC. Если это так, вы можете использовать

select * from ACTION
union 
select * from public.ACTION
4 голосов
/ 07 ноября 2008

Итак, ваша базовая таблица ACTION должна быть переименована, скажем, сделать LOCAL_ACTION.

Давайте представим, что ваш синоним ACTION находится в таблице otheruser.LOCAL_ACTION ...

Тогда вы можете переопределить синоним ДЕЙСТВИЯ так:

SELECT * from LOCAL_ACTION
UNION
SELECT * from otheruser.LOCAL_ACTION

Затем, в конце, выберите * из ДЕЙСТВИЯ, чтобы получить объединенный список обеих таблиц.

1 голос
/ 10 ноября 2008

Таблицы и частные синонимы действительно имеют одно и то же пространство имен, так что это общий синоним: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements008.htm#sthref723

Помните, что UNION неявно отличается от результирующего набора. Что вам нужно, так это UNION ALL.

select * from ACTION
union all
select * from public.ACTION
...