Я читаю Полевое Руководство А по Генетическому Программированию прямо сейчас (бесплатная загрузка PDF). Это также доступно как книга в мягкой обложке. Это диски использование библиотеки, записанной в Java, названном TinyGP. Вы могли бы вытащить некоторый пробег из этого. Я не начал делать любое фактическое программирование, но надеюсь, применяет некоторые понятия в C#.
Этот один лайнер фактически решил все:
PRAGMA SERIALLY_REUSABLE;
Убедитесь, что ваши глобальные переменные не имеют состояния, чтобы избежать каких-либо проблем.
В пакете есть открытые или частные переменные. (Верно?) Эти переменные формируют состояние пакета. Если вы скомпилируете пакет в 3-м сеансе. При следующем доступе к этому пакету будет выдано сообщение ORA-04068.
Отметка времени сборки пакета должна быть старше, чем состояние сеанса пакета.
Если состояние пакета не требуется для выполнения сценария, вызовите DBMS_SESSION.RESET_PACKAGE
в начале вашего скрипта. Это очищает все состояния пакетов вашего сеанса.
Вы также можете проверить dba_dependencies
или user_dependencies
.
select *
from dba_dependencies
where name = 'YOUR_PACKAGE'
and type = 'PACKAGE' --- or 'PACKAGE_BODY'
and owner = USER --- or USERNAME
Это даст вам объекты, от которых зависит ваш пакет. Узнай, что там происходит.
Похоже, вы вносите изменения в свои объекты, которые делают другие объекты недействительными. Например, удаление индекса может перевести в недопустимое состояние все пакеты, зависящие от этой таблицы. Может иметь каскадный эффект. Если пакет недействителен, функция, зависящая от пакета, и представление, использующее эту функцию, могут стать недействительными. Попробуйте перекомпилировать все объекты после каждого запроса DDL.