Недавно добавленный столбец не отображается в синониме - PullRequest
4 голосов
/ 04 марта 2020

У меня есть таблица с именем YY_ZZ_VAT_TRX_DETAILS в схеме XX. Он имеет существующую схему от SYNONYM до AA.

В данный момент я вошел как AA, и я хотел добавить столбец к YY_ZZ_VAT_TRX_DETAILS и выполнил приведенную ниже команду просто отлично

alter table XX.YY_ZZ_VAT_TRX_DETAILS
add (USER_DEFINED_FISC_CLASS VARCHAR2(30));

Таблица XX.YY_ZZ_VAT_TRX_DETAILS изменена.

Я попытался выбрать столбец из таблицы с помощью простого запроса ниже

select  USER_DEFINED_FISC_CLASS
from    YY_ZZ_VAT_TRX_DETAILS;

Но я неожиданно получил эта ошибка:

ORA-00904: «USER_DEFINED_FISC_CLASS»: неверный идентификатор 00904. 00000 - «% s: неверный идентификатор» * Причина:
* Действие: Ошибка в строке: 1 Столбец: 9

Я думал, что просто пропустил изменение таблицы, поэтому я снова запустил скрипт ALTER, но вместо этого получил эту ошибку:

Ошибка запуска в строке: 4 в команде - изменить таблицу XX.YY_ZZ_VAT_TRX_DETAILS add (USER_DEFINED_FISC_CLASS VARCHAR2 (30)) Отчет об ошибке - ORA-01430: добавляемый столбец уже существует в таблице 01430. 00000 - «добавляемый столбец уже существует в таблице" * Причина:
* Действие:

Я проверил Определение объекта и, конечно же, я нашел там новый столбец:

enter image description here

Но когда я запрашиваю все столбцы из таблицы, я все равно не могу увидеть его:

select  *
from    YY_ZZ_VAT_TRX_DETAILS;

enter image description here

Однако, когда я выполняю запрос с использованием префикса схемы XX, я вижу столбец:

select  *
from    XX.YY_ZZ_VAT_TRX_DETAILS;

enter image description here

Почему синоним не подбирает вновь добавленный столбец?

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Похоже, что это было вызвано " Переопределением на основе издания ", которое Oracle недавно ввело для 12 c.

При дальнейшем расследовании произошло следующее:

В таблице XX.XX_ZZ_VAT_TRX_DETAILS имеется редактируемое представление с именем XX_ZZ_VAT_TRX_DETAILS#, которое выбирает только определенное количество столбцов.

Теперь представление XX_ZZ_VAT_TRX_DETAILS# имеет SYNONYM с именем XX_ZZ_VAT_TRX_DETAILS в схеме. AA, следовательно, путаница в таблице, имеющей синоним с тем же именем.

Чтобы решить эту проблему, я изменил представление XX_ZZ_VAT_TRX_DETAILS#, добавил новый столбец и успешно перекомпилировал его.

Как только это было сделано, теперь синоним показывает вновь добавленный столбец, и я смог успешно скомпилировать хранимую процедуру.

0 голосов
/ 04 марта 2020

Я полагаю, что у вас может быть таблица или представление с именем YY_ZZ_VAT_TRX_DETAILS или частный синоним, указывающий на другую таблицу?.

В oracle предпочтение при запросе составляет

1) objects_in той же схемы 2) частный синоним 3) publi c синоним

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...