Existuje způsob, jak to udělat, za předpokladu, že máte 10 g nebo vyšší. Říká se tomu podmíněná kompilace. Toto je velmi úhledná funkce, která poskytuje speciální syntaxi, takže můžeme změnit náš PL/SQL kód během kompilace.
Stává se, že jsem tuto funkci používal přesně k odhalení soukromých balíčků ve specifikaci, abych proti nim mohl spouštět testy UTPLSQL.
Zde je speciální syntaxe:
create or replace package my_pkg
as
$IF $$dev_env_test $THEN
PROCEDURE private_proc;
$END
FUNCTION public_function return date;
end my_pkg;
/
Tato proměnná se znakem dvojitého dolaru je příznak podmíněné kompilace.
Pokud popíšu balíček, můžeme vidět pouze veřejný balíček:
SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE
SQL>
Nyní nastavím podmíněný příznak a znovu zkompiluji balíček a jako mávnutím kouzelného proutku ...
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>
Privatizace funkcí je tak jednoduchá, jak si myslíte, že by byla:
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>
S podmíněnou kompilací dokážeme mnohem více. Je to zahrnuto v dokumentech. Další informace