Предполагам, че докладвате само последната грешка в стека като този:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "schema.package" has been invalidated
ORA-04065: not executed, altered or dropped package body "schema.package"
ORA-06508: PL/SQL: could not find program unit being called: "schema.package"
Ако е така, това е защото вашият пакет е с състояние:
Стойностите на променливите, константите и курсорите, които пакетът декларира (в неговата спецификация или в тялото си), съдържат неговото състояние на пакета . Ако PL/SQL пакет декларира поне една променлива, константа или курсор, тогава пакетът е състояние; в противен случай ебез гражданство .
Когато прекомпилирате, състоянието се губи:
Ако тялото на инстанциран пакет с поддържане на състоянието се прекомпилира (или изрично, с „Изявление на ALTER PACKAGE“, или имплицитно), следващото извикване на подпрограма в пакета кара Oracle Database да отхвърли съществуващото състояние на пакета и да повдигне изключениетоORA-04068.
След като PL/SQL повдигне изключението, препратка към пакета кара Oracle Database да инстанцира отново пакета, което повторно инициализира...
Не можете да избегнете това, ако вашият пакет има състояние. Мисля, че е доста рядко наистина да се нуждаете от пакет, който да е с състояние, така че трябва да прегледате отново всичко, което сте декларирали в пакета, но извън функция или процедура, за да видите дали наистина е необходимо на това ниво. Тъй като сте на 10g обаче, това включва константи, а не само променливи и курсори.
Но последният параграф от цитираната документация означава, че следващия път, когато препратите пакета в същата сесия, няма да получите грешката и тя ще работи нормално (докато не компилирате отново).