Jest na to sposób, pod warunkiem, że ważysz 10g lub więcej. Nazywa się to kompilacją warunkową. Jest to bardzo fajna funkcja, która zapewnia specjalną składnię, dzięki czemu możemy zmienić nasz kod PL/SQL w czasie kompilacji.
Tak się złożyło, że używałem tej funkcji właśnie po to, aby ujawnić prywatne pakiety w specyfikacji, aby móc przeprowadzać na nich testy UTPLSQL.
Oto specjalna składnia:
create or replace package my_pkg
as
$IF $$dev_env_test $THEN
PROCEDURE private_proc;
$END
FUNCTION public_function return date;
end my_pkg;
/
Ta zmienna ze znakiem podwójnego dolara jest flagą kompilacji warunkowej.
Jeśli opiszę pakiet, możemy zobaczyć tylko pakiet publiczny:
SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE
SQL>
Teraz ustawiam flagę warunkową i ponownie kompiluję pakiet i jak za dotknięciem czarodziejskiej różdżki...
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>
Prywatyzacja funkcji jest tak prosta, jak myślisz:
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>
Dzięki kompilacji warunkowej możemy zrobić o wiele więcej. Jest to opisane w dokumentach. Dowiedz się więcej.