SQL> SQL> -- Private functions or procedures are defined only in the package body. SQL> -- They are not defined in the package. SQL> -- Suppose you would like to put all the private functions at the bottom SQL> -- of the package (even though this is not required), or you would like to arrange SQL> -- the sub routines in a particular order, how do you call a routine before it is defined? SQL> -- You can not. But you can use "Forward declarations" in the package body to SQL> -- get around the problem. SQL> SQL> create or replace package test_pkg_a as 2 function func2(p1 number) return number; 3 end test_pkg_a ; 4 / Package created. SQL> SQL> -- PLS-00313: 'FUNC4' not declared in this scope SQL> create or replace package body test_pkg_a as 2 function func2(p1 number) return number 3 is 4 begin 5 return func4(p1)+10; 6 end; 7 8 function func4(p1 number) return number 9 is 10 begin 11 return p1+4; 12 end; 13 14 end; 15 / Warning: Package Body created with compilation errors. SQL> SQL> -- Forward declare func3 SQL> -- Note that function func3 and func1 are private functions SQL> create or replace package body test_pkg_a as 2 3 function func3(p1 number) return number; 4 5 function func1(p1 number) return number 6 is 7 begin 8 return p1+1; 9 end; 10 11 function func2(p1 number) return number 12 is 13 begin 14 return func1(p1)+func3(p1)+2; 15 end; 16 17 function func3(p1 number) return number 18 is 19 begin 20 return p1+3; 21 end; 22 23 end; 24 / Package body created. SQL> SQL> select test_pkg_a.func2(10) from dual; TEST_PKG_A.FUNC2(10) -------------------- 26 SQL> SQL> drop package test_pkg_a; Package dropped. SQL> SQL> spool off