包相对于独立的过程和函数有什么好处?

Lei*_*fel 13 oracle plsql

寻找一个规范的答案来回答为什么包应该在 Oracle 数据库中比独立的过程和函数更受欢迎。

Lei*_*fel 12

套餐的好处

逻辑分组——协同工作的方法可以放在一个有凝聚力的单元中,而不仅仅是逻辑上耦合而是物理上分离。

安全私有方法- 函数和过程可以对包私有,并且只能在包中使用。这使得公共表面更简单、更安全。

权限管理– 可以为一组协同工作的程序授予一次权限,而不是为每个所需的程序/功能单独授予权限。

安全包装- 包装的包比包装的函数/过程更难解包。

简化命名——更大的命名空间允许更简单的名称,并且可以在其他包中重复使用。

更好的性能——包可以被编译并完整地加载到内存中,而不是像其他方法那样零碎地加载。与其他好处相比,这种好处(如果它存在的话)是微乎其微的。

减少失效——更改包体不会像更改函数或过程那样使依赖项失效。

独特功能- 包变量、包常量、初始化、会话状态、包注释和重载方法。

参考资料:
11.2 概念指南
向 Tom 提问
StackOverflow.com 上关于包性能解包
PL/SQL 演示的问题 (pdf)

  • 我同意文档声称有性能优势。文档不正确,或者至少不充分。最好的情况是,“收益”的幅度微乎其微。而好处的迹象是未知的。就像读取大部分行时表扫描效率更高,读取单行时索引访问效率更高一样,如果您打算将整个包一次性读入内存也是有益的如果您真的只想要一种方法,请使用每种方法并且不利。 (4认同)
  • 我不得不不同意性能优势。如果将代码加载到内存中是一个明显的等待事件,那么发生了非常糟糕的事情。并且很有可能包会降低性能,因为当您只真正需要一个方法时,当您加载整个包时,您必须阅读更多代码。但是,在这两种情况下,性能差异都无法衡量。 (2认同)