这是我第一次尝试创建一个包,所以我一定遗漏了一些非常明显的东西(我在谷歌上搜索的任何东西似乎都认为值得一提)。

显然,如果您的包主体中有未包含在规范部分中的过程,则这些过程是私有(private)的。我遇到的问题是,一旦我制作了它们,我似乎无法弄清楚如何 引用 那些私有(private)包。并且 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;

我也试过将其称为 testPackage.privateProc ,但也没有用。

我究竟做错了什么?

最佳答案

我认为你应该这样做:

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;

只需调用 privateProc 就好像它是语言的一部分一样。 Execute用于在PL/SQL中运行DML或SQL。

关于oracle - 如何在 Oracle 包中执行私有(private)过程?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/924490/

10-17 00:36