Как выполнить частные процедуры в пакете Oracle? - PullRequest
4 голосов
/ 29 мая 2009

Это моя первая попытка создания пакета, поэтому я, должно быть, упускаю что-то действительно очевидное (ничто из того, для чего я гуглил, кажется, даже не стоит упоминать).

Очевидно, что если в теле вашего пакета есть процедуры, которые не включены в раздел спецификации, то эти процедуры являются частными. Проблема в том, что я не могу понять, как ссылаться на эти частные пакеты, как только я их сделаю. И 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, который тоже не сработал.

Что я делаю не так?

Ответы [ 2 ]

15 голосов
/ 29 мая 2009

Я думаю, вы должны сделать это:

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 предназначен для запуска DML или SQL внутри вашего PL / SQL.

0 голосов
/ 03 июня 2009
CREATE OR REPLACE PACKAGE BODY testPackage AS

PROCEDURE publicProc; --Forward declaration

PROCEDURE publicProc IS
BEGIN
privateProc; --exec privateProc;
END;

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

END testPackage;

//call testPackage.publicProc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...