Кажется, это ошибка при определении типа коллекции для представления, а не для таблицы.Изменение определения таблицы делает недействительным представление и спецификацию / тело пакета, как и ожидалось, но не типы 1 ;поэтому, когда представление и пакет неявно перекомпилируются при следующей ссылке, типы, похоже, упускаются из виду.
Перекомпиляция пакета или представления или даже явное повторное введение команды create or replace
для спецификации и тела пакета некажется, что это имеет какой-либо эффект.
Даже полное удаление пакета перед его повторным созданием не помогает, поскольку тип связан с представлением, а не с пакетом (идентификатор связанного объекта является частью имени типа).
Вы можете отбросить представление, а затем воссоздать его, и ссылка на следующий пакет также воссоздает тип;но тогда вам придется восстановить права доступа к нему (и, конечно, он кратковременно не будет существовать, поэтому, если вы попытаетесь сделать это вне окна обслуживания, в результате могут произойти другие ошибки).
Вы не делаетехотя должно быть довольно жестоким.Хотя перекомпиляция представления не помогает, переопределение его на месте делает:
create or replace view VW_SHOW_USERS as select * from SHOW_USR;
, что должно быть менее разрушительным, чем удаление его, так как привилегии для представления будут сохранены.
Я создал демо-версию db <> fiddle , показывающую исходную проблему и различные неудачные попытки ее исправить, а затем переопределение вида.
1 Есликоллекция определяется непосредственно по таблице, а не по представлению, тогда тип также аннулируется alter table
, поэтому он перекомпилируется с новым определением, и эта проблема не возникает.При использовании представления выглядит, что что-то упущено при оценке зависимостей.Может быть стоит подать запрос на обслуживание в Oracle, чтобы выяснить это.(Я только смог довести это поведение до 12cR2; возможно, кто-то может проверить, что происходит в 18?)