J'ai un script qui utilise un paquet (PKG_MY_PACKAGE). Je vais changer certains des champs dans une requête dans ce paquet et ensuite le recompiler (je ne change pas et ne compile pas d'autres paquets). Je lance le script et je reçois une erreur qui ressemblePL/SQL Package invalidé
ORA-04068: existing state of packages has been discarded ORA-04061: existing state of package body "USER3.PKG_MY_PACKAGE" has been invalidated ORA-04065: not executed, altered or dropped package body "USER3.PKG_MY_PACKAGE" ORA-06508: PL/SQL: could not find program unit being called: "USER3.PKG_MY_PACKAGE" ORA-06512: at line 34
Je lance à nouveau le script (sans rien changer d'autre dans le système) et le script est exécuté avec succès.
Je pensais que lorsque j'ai compilé avant d'exécuter le script qui permettrait de corriger les références invalides. C'est reproductible à 100%, et plus j'utilise ce script, plus ça devient ennuyeux. Qu'est-ce qui pourrait causer cela, et qu'est-ce qui pourrait le réparer?
(oracle 10g, en utilisant PL/SQL Developer 7)
@OMG: Je ne fais que recompiler le corps car c'est tout ce qui change. – FrustratedWithFormsDesigner
Il n'y a aucune raison pour que vous utilisiez des variables globales pour cela - passez simplement à sys_context. De cette façon, vous pouvez complètement supprimer les variables globales et rendre votre paquet sans état. –