Det finns ett sätt att göra detta, förutsatt att du är på 10g eller mer. Det kallas villkorlig sammanställning. Detta är en mycket snygg funktion som tillhandahåller speciell syntax så att vi kan ändra vår PL/SQL-kod vid kompileringstillfället.
Som det händer har jag använt den här funktionen just för att exponera privata paket i en spec så att jag kan köra UTPLSQL-tester mot dem.
Här är den speciella syntaxen:
create or replace package my_pkg
as
$IF $$dev_env_test $THEN
PROCEDURE private_proc;
$END
FUNCTION public_function return date;
end my_pkg;
/
Variabeln med dubbeldollartecknet är en villkorlig kompileringsflagga.
Om jag beskriver paketet kan vi bara se det offentliga paketet:
SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE
SQL>
Nu ställer jag in den villkorliga flaggan och kompilerar om paketet, och som genom ett trollslag ...
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>
Att privatisera funktionerna är så enkelt som du tror att det skulle vara:
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öra mycket mer med villkorlig sammanställning. Det tas upp i dokumenten. Läs mer.