Jag misstänker att du bara rapporterar det senaste felet i en stack så här:
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"
Om så är fallet, beror det på att ditt paket är giltigt:
Värdena för variablerna, konstanterna och markörerna som ett paket deklarerar (antingen i dess specifikation eller body) utgör dess packagestate . Om ett PL/SQL-paket deklarerar minst en variabel, konstant eller markör, är paketet stateful; annars är den statslös .
När du kompilerar om tillståndet förloras:
Om brödtexten i ett instansierat, tillståndsfyllt paket kompileras om (antingen uttryckligen med "ALTER PACKAGE Statement", eller implicit), får nästa anrop av ett underprogram i paketet att Oracle Database kasserar det befintliga pakettillståndet och höjer exceptionORA-04068.
Efter att PL/SQL höjt undantaget, får en referens till paketet att Oracle Database återinstantierar paketet, vilket återinitialiseras...
Du kan inte undvika detta om ditt paket har status. Jag tror dock att det är ganska sällsynt att man verkligen behöver ett paket för att vara tillståndsfullt, så du bör gå igenom allt du har deklarerat i paketet, men utanför en funktion eller procedur, för att se om det verkligen behövs på den nivån. Men eftersom du är på 10g inkluderar det konstanter, inte bara variabler och markörer.
Men det sista stycket från den citerade dokumentationen betyder att nästa gång du refererar till paketet i samma session kommer du inte att få felet och det kommer att fungera som vanligt (tills du kompilerar om igen).