【问题标题】:Oracle package specs and bodyOracle 软件包规格和正文
【发布时间】:2016-11-21 01:11:22
【问题描述】:

所以我知道,如果您在包规范中定义了某些内容,那么它必须在主体中实现。是否可以在正文中定义方法,而不是规范?

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    是的,过程或函数可以在包体中定义,但不能在包规范中定义。规范中的对象是公共的,只有主体中的对象是该包私有的。

    创建包规范和正文

    create or replace package test_package is
        procedure public_procedure;
    end;
    /
    
    create or replace package body test_package is
        procedure private_procedure is
        begin
            null;
        end;
    
        procedure public_procedure is
        begin
            private_procedure;
        end;
    end;
    /
    

    如何调用包

    --WORKS:
    begin
        test_package.public_procedure;
    end;
    /
    
    --FAILS WITH THIS ERROR:
    --  ORA-06550: line 2, column 15:
    --  PLS-00302: component 'PRIVATE_PROCEDURE' must be declared
    --  ORA-06550: line 2, column 2:
    begin
        test_package.private_procedure;
    end;
    /
    

    为什么需要这样做?

    在像 Java 这样的语言中,这个问题可能会因为太明显而被关闭。但这在 PL/SQL 中是一个可以理解的问题,因为大多数 PL/SQL 程序员都会公开所有内容。看着一个普通的 PL/SQL 程序,有理由对自己说:“这一定有充分的理由。”

    没有。

    私人应该是默认值。仅当您需要与其他对象和程序员共享某些内容时才公开。或者,如果您需要在会话期间保留某些内容。

    使用私有过程和函数来隐藏尽可能多的细节。这使得包更简单。它还为其他程序和程序员提供了更少的滥用你的包的方法。

    【讨论】:

    • 非常感谢您提供如此详细的信息。您的回答超出了预期!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    相关资源
    最近更新 更多