有一种方法可以做到这一点,只要你在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>
我们可以做更多的条件编译。它在文档中被覆盖。 Find out more.