¿Hay alguna forma en Oracle para determinar si un paquete tiene estado o no tiene estado? No conozco ninguna vista en el diccionario de datos que contenga esa información.¿Hay alguna manera de determinar si un paquete tiene estado en Oracle?
El "ORA-04068: estado existente de los paquetes de cadena se ha descartado" error es bastante molesto. Se puede eliminar eliminando las variables del paquete del paquete. 11g introdujo la característica de que un paquete con variables que son todas constantes de tiempo de compilación se tratará como sin estado.
Podría tener dos sesiones y compilar el paquete en uno y llamarlo en el otro y ver si arroja una excepción, pero eso requiere llamar a un procedimiento en el paquete, que puede no ser deseable.
Antes de responder, ¿puede explicar por qué quiere saber? No tratando de ser un dolor, solo tratando de entender qué es exactamente lo que quieres hacer. ¿Por qué es importante que sepa si el paquete tiene estado? Además, ¿está interesado en saber si un paquete tiene estado y, por lo tanto, podría, en algún momento, encontrarse con ORA-4068? O bien, para un paquete con estado, ¿le interesa saber si el estado actual del paquete es válido, no válido o no inicializado? –
Los paquetes con estado pueden ser molestos porque si se realiza un cambio mientras hay una sesión abierta, puede provocar que los usuarios obtengan errores. Tengo este problema con un paquete, que estaba refactorizando para convertirlo en apátrida y tener algunos problemas (que será el tema de una futura pregunta de SO), por lo que sería bueno tener una manera fácil de saber si el paquete es sin estado o no. Además, qué otros paquetes en la base de datos tienen estado y también podrían causar este problema. – eaolson