Има начин да направите това, при условие че сте на 10g или повече. Нарича се условна компилация. Това е много удобна функция, която предоставя специален синтаксис, така че да можем да променим нашия PL/SQL код по време на компилация.
Както се случи, използвах тази функция точно за излагане на частни пакети в спецификация, така че да мога да стартирам UTPLSQL тестове срещу тях.
Ето специалния синтаксис:
create or replace package my_pkg
as
$IF $$dev_env_test $THEN
PROCEDURE private_proc;
$END
FUNCTION public_function return date;
end my_pkg;
/
Тази променлива със знака за двоен долар е флаг за условна компилация.
Ако опиша пакета, можем да видим само публичния пакет:
SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE
SQL>
Сега задавам условния флаг и прекомпилирам пакета и сякаш с магия ...
SQL> alter session set plsql_ccflags='dev_env_test:true'
2 /
Session altered.
SQL> alter package my_pkg compile
2 /
Package altered.
SQL> desc my_pkg
PROCEDURE PRIVATE_PROC
FUNCTION PUBLIC_FUNCTION RETURNS DATE
SQL>
Приватизирането на функциите е толкова просто, колкото си мислите, че ще бъде:
SQL> alter session set plsql_ccflags='dev_env_test:false'
2 /
Session altered.
SQL> alter package my_pkg compile
2 /
Package altered.
SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE
SQL>
Можем да направим много повече с условна компилация. Това е описано в документите. Научете повече.