Существующее состояние пакетов было отброшено
Таким образом, я выполнял процедуру PLSQL просто отлично, и компилировал без ошибок. Я внес одно изменение в свою процедуру, и она по-прежнему прекрасно компилируется, но теперь, когда я ее запускаю, я получаю эту ошибку:
ERROR at line 1:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "SCHEMA.XP_COVER_PAGEP" has been invalidated
ORA-04065: not executed, altered or dropped package body "SCHEMA.XP_COVER_PAGEP"
ORA-06508: PL/SQL: could not find program unit being called: "SCHEMA.XP_COVER_PAGEP"
ORA-06512: at "SCHEMA.XP_ST_002180", line 141
ORA-06512: at line 1
Есть идеи, что бы это могло быть? Изменение, которое я сделал, было настолько незначительным, что я сомневаюсь, что оно могло вызвать эту ошибку. Заранее благодарю вас за помощь!
3 ответов:
Когда сеанс использует пакет, этот сеанс сохраняет некоторое состояние пакета. Если этот пакет будет перекомпилирован в следующий раз, когда тот же сеанс будет ссылаться на пакет, вы получите эту ошибку.
Чтобы избежать этого, убедитесь, что вы отключаете каждый сеанс, который, возможно, использовал пакет или сделал сеанс DBMS_SESSION.RESET_PACKAGE для сброса состояния пакета.
При перекомпиляции спецификации пакета все зависимые объекты становятся недействительными. Зависимым объектом является любое представление, спецификация пакета, тело пакета, функция или процедура, ссылающиеся на любое из объявлений в спецификации перекомпилированного пакета.
Кроме того, как указывает darreljnz, сеансы обычно сохраняют ссылки на состояние пакетов, к которым они обращались, вызываяORA-04068: existing state of packages has been discardedпри следующей попытке сеанса ссылаться на пакет.Это последнее поведение является реальная неприятность и делает необходимым либо написать код для повторных операций, либо закрыть все Активные сеансы после установки новой версии пакета (фактически перезапуская приложение/службу). Итог:это затрудняет установку исправлений.
Comments