Есть способ сделать это, если вы на 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>
Мы можем сделать гораздо больше с условной компиляцией.Это покрыто в документах. Узнайте больше.