如何在Oracle包中执行私有过程?

Mar*_*ret 4 oracle plsql

这是我第一次尝试创建一个包,所以我必须错过一些非常明显的东西(我用Google搜索的内容似乎甚至不值得一提).

显然,如果您的包体中有未包含在规范部分中的过程,那么这些过程是私有的.我遇到的问题是,一旦我制作了私有包,我似乎无法弄清楚如何引用这些私有包.并且SQL Developer拒绝向我提供任何比'完成警告'更有用的消息,这没有帮助......

作为一个例子,这是我一直在尝试的不起作用(只是抛出上述编译器错误):

CREATE OR REPLACE PACKAGE BODY testPackage AS

PROCEDURE privateProc; --Forward declaration

PROCEDURE publicProc IS
BEGIN
    EXECUTE privateProc();
END;

PROCEDURE privateProc IS
BEGIN
    DBMS_OUTPUT.PUT_LINE('test');
END;

END testPackage;
Run Code Online (Sandbox Code Playgroud)

我也试过把它称为testPackage.privateProc,但也没有用.

我究竟做错了什么?

Mar*_*ark 15

我想你应该这样做:

CREATE OR REPLACE PACKAGE BODY testPackage AS
PROCEDURE privateProc; --Forward declaration

PROCEDURE publicProc IS
  BEGIN    
    privateProc();
END;

PROCEDURE privateProc IS
BEGIN    
  DBMS_OUTPUT.PUT_LINE('test');
END;
END testPackage;
Run Code Online (Sandbox Code Playgroud)

只需将privateProc称为语言的一部分即可.Execute用于在PL/SQL中运行DML或SQL.