这是我第一次尝试创建一个包,所以我一定遗漏了一些非常明显的东西(我在谷歌上搜索的任何东西似乎都认为值得一提)。
显然,如果您的包主体中有未包含在规范部分中的过程,则这些过程是私有(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/