PL/SQL,如何将包的通用代码行放在共享包中
Posted
技术标签:
【中文标题】PL/SQL,如何将包的通用代码行放在共享包中【英文标题】:PL/SQL, how to put common code lines of packages in a shared package 【发布时间】:2014-09-10 09:32:52 【问题描述】:我有几个包,它们的一些规范和正文行是相同的,所以我想将所有相同的代码放在一个通用包中并共享该包。 对于程序主体,它并没有那么困难,因为我在 Common 包中定义了 Main 程序,并在其他包中使用了它,但是我怎样才能对 Specifications 做同样的事情呢?
假设我有一些公共变量或常量变量:
CNST_S_DATA_MINIMA constant varchar2 (10) := '1900-01-01';
CNST_D_DATA_MINIMA constant date := To_date (CNST_S_DATA_MINIMA, CNST_S_FORMATO_DATE);
ERR__VOID_PARAMETER EXCEPTION;
【问题讨论】:
它们的规格有哪些相同之处?你能edit 并添加一个例子吗? 请添加一些工作示例。此外,您不会使用通用包来尽量减少行数。您可以使用它们为其他包提供通用功能。 PL/SQL 是一种成熟的面向对象的编程语言。您必须利用面向对象的特性来实现更好的目的,而不仅仅是节省代码行数。 你能举例说明如何利用面向对象的特性吗? 【参考方案1】:只需将它们放入用作此类全局常量容器的包的包规范(而不是主体)中。
【讨论】:
我知道我在包规范中定义的都是Public,但是其他包怎么知道这些变量和常量已经被定义而没有一一调用(pkg_A.variable1)?无论如何要在另一个中导入一个包吗? 我不知道...但是您可以做一件事:像这样定义PKG_B
中的常量:CNST_S_DATA_MINIMA constant varchar2(10) := PKG_A.CNST_S_DATA_MINIMA;
;所以你只有一个地方真正的价值是(DRY)。
但这意味着在我的包中写入相同数量的行,而我想要一个 Common_PKG 的主要原因是分隔重复的行并尽量减少行数!
其实 pkg_b 不需要定义一个等于来自 pkg_a 的值的变量。只需在需要时直接引用 pkg_a 值即可。请记住,包规范中定义的变量是公共的,可用于包外的程序,包主体中定义的变量是私有的,仅可用于包内的函数/过程。请注意,您也可以在正文中定义一个仅对包成员可见的私有函数/过程。
@Alex:你仍然有相同数量的行,这是真的,但是你有一个定义值的地方。这很有价值,因为您只需在一个地方更改定义。以上是关于PL/SQL,如何将包的通用代码行放在共享包中的主要内容,如果未能解决你的问题,请参考以下文章