Частая ошибка во РТАХ Oracle 04068: существующее состояние пакетов было отброшено

Я читаю Полевое Руководство А по Генетическому Программированию прямо сейчас (бесплатная загрузка PDF). Это также доступно как книга в мягкой обложке. Это диски использование библиотеки, записанной в Java, названном TinyGP. Вы могли бы вытащить некоторый пробег из этого. Я не начал делать любое фактическое программирование, но надеюсь, применяет некоторые понятия в C#.

10
задан jonasespelita 25 November 2009 в 06:26
поделиться

4 ответа

Этот один лайнер фактически решил все:

PRAGMA SERIALLY_REUSABLE;

Убедитесь, что ваши глобальные переменные не имеют состояния, чтобы избежать каких-либо проблем.

13
ответ дан 3 December 2019 в 14:43
поделиться

В пакете есть открытые или частные переменные. (Верно?) Эти переменные формируют состояние пакета. Если вы скомпилируете пакет в 3-м сеансе. При следующем доступе к этому пакету будет выдано сообщение ORA-04068.

Отметка времени сборки пакета должна быть старше, чем состояние сеанса пакета.

Если состояние пакета не требуется для выполнения сценария, вызовите DBMS_SESSION.RESET_PACKAGE в начале вашего скрипта. Это очищает все состояния пакетов вашего сеанса.

14
ответ дан 3 December 2019 в 14:43
поделиться

Вы также можете проверить dba_dependencies или user_dependencies .

select *
from dba_dependencies
where name = 'YOUR_PACKAGE'
and type = 'PACKAGE' --- or 'PACKAGE_BODY'
and owner = USER --- or USERNAME

Это даст вам объекты, от которых зависит ваш пакет. Узнай, что там происходит.

4
ответ дан 3 December 2019 в 14:43
поделиться

Похоже, вы вносите изменения в свои объекты, которые делают другие объекты недействительными. Например, удаление индекса может перевести в недопустимое состояние все пакеты, зависящие от этой таблицы. Может иметь каскадный эффект. Если пакет недействителен, функция, зависящая от пакета, и представление, использующее эту функцию, могут стать недействительными. Попробуйте перекомпилировать все объекты после каждого запроса DDL.

0
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: