gpt4 book ai didi

oracle - 有没有办法访问私有(private) plsql 程序以进行测试?

转载 作者:行者123 更新时间:2023-12-03 13:55:23 24 4
gpt4 key购买 nike

我正在开发一个包含大量 plsql 代码的项目,并希望在我们的代码库中添加更具体的单元测试。我喜欢测试的一些过程/功能不在包规范中,我没有办法改变它。

有没有办法在不将它们添加到规范中的情况下访问这些“私有(private)”plsql 程序?

到目前为止,我唯一的想法是在测试之前为 DB 编译一个特殊的包规范,它指定了被测过程。我想这会奏效,但我想知道是否有更简单的方法,也许是一些邪恶的 secret 预言机 ;-)

我正在使用 JUnit/DBUnit 从 Java 进行测试。

BR
坦率

最佳答案

有一种方法可以做到这一点,前提是您使用 10g 或更高版本。它被称为条件编译。这是一个非常简洁的特性,它提供了特殊的语法,因此我们可以在编译时更改我们的 PL/SQL 代码。

碰巧我一直在使用这个特性来精确地在规范中公开私有(private)包,这样我就可以对它们运行 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;
/

带有双美元符号的变量是条件编译标志。

如果我描述包,我们只能看到公共(public)包:
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>

将功能私有(private)化就像您想象的那样简单:
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.

关于oracle - 有没有办法访问私有(private) plsql 程序以进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6761782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com