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;
/
2ドル記号の付いた変数は、条件付きコンパイルフラグです。
パッケージについて説明すると、パブリックパッケージしか表示されません:
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>
条件付きコンパイルを使用すると、さらに多くのことができます。ドキュメントで説明されています。 詳細a>