【问题标题】:How to declare a public and a private item inside a package?如何在包内声明公共和私有项目?
【发布时间】:2013-04-14 08:30:49
【问题描述】:

谁能解释一下public items inside the packageprivate items inside package之间的区别?

这是什么类型的减速:

create or replace package BOOK_MANAGEMENT
as
 function OVERDUE_CHARGES(aName IN VARCHAR2) return NUMBER;
 procedure NEW_BOOK (aTitle IN VARCHAR2,
   aPublisher IN VARCHAR2, aCategoryName IN VARCHAR2);
end BOOK_MANAGEMENT;

【问题讨论】:

    标签: oracle plsql package


    【解决方案1】:

    注意 - 包中的内联函数不能是“私有”的,因为它们的定义必须在包头中才能确定它们的“纯度”。您不能在包正文中发出 PRAGMA RESTRICT REFERENCES。我认为这是一个错误(使用 Oracle 11.2.0.4)。

    【讨论】:

    • 那太好了!如果您可以添加任何参考。
    【解决方案2】:

    包中的公共和私人项目

    Public 是一个关键字,表示可以在包外访问该特定项目。

    Private 表示该项目仅在包内部使用。

    例子

    create or replace package BOOK_MANAGEMENT
    as
     function OVERDUE_CHARGES(aName IN VARCHAR2) return NUMBER;
     procedure NEW_BOOK (aTitle IN VARCHAR2,
      aPublisher IN VARCHAR2, aCategoryName IN VARCHAR2);
     end BOOK_MANAGEMENT;
    

    现在这里的过程和功能是公开的,可供外界访问。

    但是现在以身体为例

    CREATE PACKAGE BODY BOOK_MANAGEMENT AS
       number_of_books INT;  /*<-- visible only in this package*/
    /*Rest of body blah blah blah*/
    END BOOK_MANAGEMENT;
    

    请注意,上面的图书数量是私人的,不会向用户显示。但是(假设是)有必要实现这些方法

    同样你也可以拥有私有函数

    如何公开 number_of_books

     create or replace package BOOK_MANAGEMENT
    as
       number_of_books INT;/*Now its public*/
     function OVERDUE_CHARGES(aName IN VARCHAR2) return NUMBER;
     procedure NEW_BOOK (aTitle IN VARCHAR2,
      aPublisher IN VARCHAR2, aCategoryName IN VARCHAR2);
     end BOOK_MANAGEMENT;
    

    【讨论】:

    • 我如何将number_of_books公开?
    • @saplingPro - 您可以将其移至包规范。根据定义,包规范中的任何内容都是公开的。根据定义,仅出现在包正文中的任何内容都是私有的
    • @saplingPro 更新了答案检查一下
    猜你喜欢
    • 2017-05-15
    • 2013-08-09
    • 2014-09-07
    • 2015-12-27
    • 2013-06-11
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2011-06-21
    相关资源
    最近更新 更多