Der er en måde at gøre dette på, forudsat at du er på 10g eller mere. Det kaldes betinget kompilering. Dette er en meget smart funktion, som giver en speciel syntaks, så vi kan ændre vores PL/SQL-kode på kompileringstidspunktet.
Som det sker, har jeg brugt denne funktion netop til at afsløre private pakker i en spec, så jeg kan køre UTPLSQL-test mod dem.
Her er den specielle syntaks:
create or replace package my_pkg
as
$IF $$dev_env_test $THEN
PROCEDURE private_proc;
$END
FUNCTION public_function return date;
end my_pkg;
/
Denne variabel med dobbelt-dollar-tegnet er et betinget kompileringsflag.
Hvis jeg beskriver pakken, kan vi kun se den offentlige pakke:
SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE
SQL>
Nu sætter jeg det betingede flag og kompilerer pakken igen, og som ved et trylleslag ...
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>
Privatisering af funktionerne er så simpelt, som du tror, det ville være:
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>
Vi kan gøre meget mere med betinget kompilering. Det er dækket af dokumenterne. Få mere at vide.