【问题标题】:What will happen if we compile a Oracle package with different name?如果我们编译一个不同名称的 Oracle 包会发生什么?
【发布时间】:2017-04-23 13:52:10
【问题描述】:

我有一个包含许多存储过程的 sql 包。

create or replace package body My_Pck is
    /** Package started **/

    /** Procedure 1 **/
    procedure one() as
    begin
    end;

    /** Procedure 2 **/
    procedure one() as
    begin
    end;
My_Pck end;

问题是如果我用不同的名字编译这个包会发生什么?新包中的其他程序会覆盖原来的程序吗?我搜索了很多,但没有得到合适的答案。

任何建议都会非常有帮助。

【问题讨论】:

  • 如果你编译一个不同名字的包,那么你会得到2个包。为什么要使用其他名称来编译包?如果第一个名字选得不好,第二个名字选得好,那么你可以放弃第一个包。
  • 包支持封装 - 包内的所有过程都属于包...不同的包可以有相同名称的过程 - 但这将是不同的过程...
  • 没有。第一个包在应用程序中使用。我对包做了一些修改。所以为了测试目的,我需要用另一个名字编译这个包。

标签: sql oracle oracle11g package procedure


【解决方案1】:

这里你需要明白一点。

包基本上是过程、函数等的集合。在包中定义的过程,如果不指定限定符包名,就不能独立调用。这些过程始终用作 package.procedure。

让我们考虑一下您的包裹。您可以调用 My_Pck.one 之类的过程。

create or replace package body My_Pck is
/** Package started **/

/** Procedure 1 **/
procedure one() as
begin
end;

/** Procedure 2 **/
procedure one() as
begin
end;
My_Pck end;

如果你编译如下不同名称的包,那么你需要调用过程为 my_pck2.one。

create or replace package body My_Pck2 is
/** Package started **/

/** Procedure 1 **/
procedure one() as
begin
end;

/** Procedure 2 **/
procedure one() as
begin
end;
My_Pck end;

谢谢

【讨论】:

    猜你喜欢
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多