加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 13:52:18 所属栏目:百科 来源:网络整理
导读:我正在开发一个有很多plsql代码的项目,并希望在我们的代码库中添加更多的单元测试。我喜欢测试的一些程序/函数不在包规范中,我没有办法改变。 有没有办法访问这些“私有”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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读