sql >> Database >  >> RDS >> Oracle

ORA-06508:PL/SQL:kon de aangeroepen programma-eenheid niet vinden

Ik vermoed dat je alleen de laatste fout in een stapel als deze rapporteert:

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"

Als dat zo is, is dat omdat uw pakket stateful is:

De waarden van de variabelen, constanten en cursors die een pakket aangeeft (in de specificatie of in de hoofdtekst) vormen de packagestate . Als een PL/SQL-pakket ten minste één variabele, constante of cursor declareert, dan is het pakket stateful; anders is het staatloos .

Wanneer u de status opnieuw compileert, gaat het volgende verloren:

Als de hoofdtekst van een geïnstantieerd, stateful pakket opnieuw wordt gecompileerd (expliciet, met de "ALTER PACKAGE Statement", of impliciet), zorgt de volgende aanroep van een subprogramma in het pakket ervoor dat Oracle Database de bestaande pakketstatus verwijdert en de exceptionORA-04068 opheft.

Nadat PL/SQL de uitzondering heeft gegenereerd, zorgt een verwijzing naar het pakket ervoor dat Oracle Database het pakket opnieuw initialiseert, waardoor het opnieuw wordt geïnitialiseerd...

U kunt dit niet vermijden als uw pakket een status heeft. Ik denk dat het vrij zeldzaam is dat een pakket echt stateful is, dus je moet alles wat je in het pakket hebt gedeclareerd opnieuw bekijken, maar buiten een functie of procedure om, om te zien of het echt nodig is op dat niveau. Aangezien je echter 10g gebruikt, omvat dat constanten, niet alleen variabelen en cursors.

Maar de laatste alinea van de geciteerde documentatie betekent dat de volgende keer dat u naar het pakket verwijst in dezelfde sessie, u de fout niet krijgt en dat het normaal zal werken (totdat u opnieuw compileert).



  1. Hoe voer je een opgeslagen procedure uit in Oracle SQL Developer?

  2. Database-e-mail configureren in SQL Server

  3. Beste ontwerppatroon om databaseverbinding te sluiten wanneer zich een uitzondering voordoet

  4. Toegang krijgen tot externe XML-bestanden als variabelen in een PSQL-script (afkomstig van een bash-script)