Podejrzewam, że zgłaszasz tylko ostatni błąd w takim stosie:
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"
Jeśli tak, to dlatego, że Twój pakiet jest stanowy:
Wartości zmiennych, stałych i kursorów, które pakiet deklaruje (w jego specyfikacji lub treści) składają się na jego stan pakietu . Jeśli pakiet PL/SQL deklaruje co najmniej jedną zmienną, stałą lub kursor, pakiet jest stanowy; w przeciwnym razie jest bezpaństwowy .
Po ponownej kompilacji stan zostanie utracony:
Jeśli treść utworzonego pakietu stanowego zostanie ponownie skompilowana (albo jawnie, za pomocą "Instrukcji ALTER PACKAGE", albo niejawnie), następne wywołanie podprogramu w pakiecie spowoduje, że Oracle Database odrzuci istniejący stan pakietu i zgłosi wyjątekORA-04068.
Po tym, jak PL/SQL zgłosi wyjątek, odwołanie do pakietu powoduje, że Oracle Database ponownie tworzy instancję pakietu, co powoduje jego ponowne zainicjowanie...
Nie możesz tego uniknąć, jeśli twój pakiet ma stan. Myślę, że dość rzadko zdarza się, aby pakiet był stanowy, więc powinieneś ponownie przejrzeć wszystko, co zadeklarowałeś w pakiecie, ale poza funkcją lub procedurą, aby zobaczyć, czy jest to naprawdę potrzebne na tym poziomie. Ponieważ jednak korzystasz z 10g, obejmuje to stałe, a nie tylko zmienne i kursory.
Ale ostatni akapit z cytowanej dokumentacji oznacza, że następnym razem, gdy odniesiesz się do pakietu w tej samej sesji, nie otrzymasz błędu i będzie on działał normalnie (do czasu ponownej kompilacji).