在包体或规范中使用常量的一个缺点是,当您重新编译包时,在PGA中具有包状态的任何用户会话都将获得ORA-04068.出于这个原因,在一个大型开发环境中,我们采用了一个公式,即为每个包提供一个单独的spec-only包来保存常量(以及包的全局变量).然后我们施加一条规则,说这些仅限规范的包只允许被他们的"拥有"包引用 - 我们在代码审查时强制执行.不是一个完美的解决方案,但它在当时对我们有用.
出于同样的原因,我永远不会推荐一个常量包来统治它们,因为每次有人需要引入一个新常量或修改现有常量时,所有用户会话都会得到ORA-04068.