plsql包中的spec - 为什么需要它

时间:2015-11-06 10:25:07

标签: oracle plsql

有人能告诉我,为什么我们在oracle PL / SQL中需要打包Spec。 无论如何,包体都具有规格的所有信息。

2 个答案:

答案 0 :(得分:7)

将包规范与包Body分离是PL / SQL等语言设计的一个基本重要部分。这是PL / SQL允许您使用封装原理的方式。

规范是指定包的Public部分的方式,即其他程序单元或外部调用者应该可以访问的函数,过程,类型和常量。

Body不仅封装了实现细节,还允许您创建Private的功能和过程;也就是说,它们只允许被同一个包中的其他函数和过程使用,并且不能被外部调用者调用。

封装带来了许多好处 - 包括自我记录:如果一个方法是私有的,你可以保证除了在同一个包中之外不会有任何调用 - 所以你可以自由地改变它,保证知识的安全您的更改至少不会破坏使用该软件包的任何其他系统。

包作为API很有用;然后,规范成为系统中其他代码调用的函数和过程的文档。

答案 1 :(得分:4)

包规范包含包中可以在包外引用的所有公共可用元素的定义或规范。 规范就像一个大的声明部分;它不包含任何PL / SQL块或可执行代码。如果规范设计得很好,开发人员可以从中学习使用该软件包所需的一切。应该永远不需要在规范的界面“后面”并查看正文中的实现。

包中的公共元素和私有元素之间的区别使PL / SQL开发人员能够对其数据结构和程序进行前所未有的控制。如下面的Booch图所示 enter image description here 注意内部和外部的两个标签。外部包含您编写的所有程序,这些程序不是手头程序包的一部分(外部程序)。内部由包体(内部或实现)组成 封装)。

以下是我们可以从Booch图中得出的结论:

  • 外部程序不能从外到内跨越边界。也就是说,外部程序可能不引用或调用包体内定义的任何元素。它们在包装外是隐形的,不可见的。
  • 包规范中定义的那些元素(图中标记为Public)跨越了内部和外部之间的边界。这些程序可以由外部程序(从外部)调用,可以由私有程序调用或引用,并且可以依次调用或引用包中的任何其他元素。
  • 包的公共元素因此提供了包内部的唯一路径。通过这种方式,包规范作为整个包的控制机制。
  • 如果您发现以前的私有对象(例如模块或游标)应该公开,只需将该对象添加到包规范并重新编译即可。然后它会在包装外面看到。

此解释的灵感来自oracle pl/sql programming 5th edition

Steven Feuerstein