Я собираюсь предположить, что у вас есть функция, объявленная первой, с последующей процедурой, похожей на:
DECLARE
FUNCTION my_func RETURN NUMBER IS
BEGIN
RETURN 2;
END my_func;
PROCEDURE my_proc IS
BEGIN
DBMS_OUTPUT.PUT_LINE(my_func + 1);
END my_proc;
BEGIN -- main
my_proc;
END; -- main
Как показано выше, с функцией, объявленной первой, вы можете вызватьфункция из процедуры.Однако, если вы попробуете что-то вроде следующего (функция, объявленная перед процедурой, и функция, вызывающая процедуру):
DECLARE
FUNCTION my_func RETURN NUMBER IS
BEGIN
my_proc;
RETURN 2;
END my_func;
PROCEDURE my_proc IS
BEGIN
DBMS_OUTPUT.PUT_LINE('22');
END my_proc;
BEGIN -- main
DBMS_OUTPUT.PUT_LINE(my_func);
END; -- main
, компиляция не удастся, потому что my_func не может «увидеть» my_proc.Чтобы это работало, вам нужно добавить в «прототип» объявление my_proc:
DECLARE
PROCEDURE my_proc;
FUNCTION my_func RETURN NUMBER IS
BEGIN
my_proc;
RETURN 2;
END my_func;
PROCEDURE my_proc IS
BEGIN
DBMS_OUTPUT.PUT_LINE('22');
END my_proc;
BEGIN -- main
DBMS_OUTPUT.PUT_LINE(my_func);
END; -- main
Делитесь и наслаждайтесь.