在哪里持有PL/SQL常量?

Ari*_*iod 13 plsql

您通常在哪里存储PL/SQL常量?在包体层面?在规范中?我也看到有些人只是为常量而在一个专门的包中保存常量.这方面的最佳做法是什么?

谢谢.

Jef*_*emp 6

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

出于同样的原因,我永远不会推荐一个常量包来统治它们,因为每次有人需要引入一个新常量或修改现有常量时,所有用户会话都会得到ORA-04068.

  • 结语的完整性:最佳实践通常是将所有内容定义为尽可能接近其使用:如果常量仅由一个过程使用,则在该过程中定义它; 如果常量仅在包体中使用,则在包体中定义它(除了上面提到的ORA-04068问题 - 在11gR2中这不是问题,如果使用了版本,应该提到它). (3认同)