oracle – 有没有办法访问私人plsql程序进行测试?

前端之家收集整理的这篇文章主要介绍了oracle – 有没有办法访问私人plsql程序进行测试?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个有很多plsql代码的项目,并希望在我们的代码库中添加更多的单元测试。我喜欢测试的一些程序/函数不在包规范中,我没有办法改变。

有没有办法访问这些“私有”plsql过程,而不添加到规范?

到目前为止,唯一的想法是在测试之前将数据库编译成一个特殊的包规范,指定了被测程序。我认为这样会工作,但是我想知道是否有一个更简单的方法,一些邪恶的秘密oracle黑客也许;-)

我使用JUnit / DBUnit从Java测试。

BR
坦率

有一种方法可以做到这一点,只要你在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.

原文链接:https://www.f2er.com/oracle/205757.html

猜你在找的Oracle相关文章