Una desventaja de tener constantes en un cuerpo de paquete o especificación es que al volver a compilar el paquete, cualquier sesión de usuario que tuviera el estado del paquete en la PGA obtendría ORA-04068. Por esta razón, en un entorno de desarrollo grande, adoptamos la convención de tener un paquete separado de solo especificación para mantener las constantes (y los globales del paquete, si corresponde) para cada paquete. Luego, impondríamos una regla que establezca que a estos paquetes de especificaciones solo se les permite hacer referencia a ellos en su paquete "propietario", que aplicamos en la revisión del código. No es una solución perfecta, pero funcionó para nosotros en ese momento.
Por la misma razón, nunca recomendaría one-constant-package-to-rule-them-all porque cada vez que alguien necesita introducir una nueva constante, o modificar una existente, todas las sesiones de usuario obtienen ORA- 04068.
Epílogo de la exhaustividad: la mejor práctica es definir lo más cercano posible a su uso: si la constante solo se utiliza en un procedimiento, defínala en ese procedimiento; si la constante solo se usa en un cuerpo de paquete, defínalo en el cuerpo del paquete (excepto por el problema ORA-04068 mencionado anteriormente, que se convierte en un problema menor en 11gR2, se debe mencionar, si se usan las ediciones). –