Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Existe uma maneira de acessar procedimentos plsql privados para fins de teste?


Existe uma maneira de fazer isso, desde que você esteja em 10g ou superior. Chama-se Compilação Condicional. Este é um recurso altamente interessante que fornece uma sintaxe especial para que possamos alterar nosso código PL/SQL no momento da compilação.

Acontece que eu tenho usado esse recurso precisamente para expor pacotes privados em uma especificação para que eu possa executar testes UTPLSQL neles.

Aqui está a sintaxe especial:
create or replace package my_pkg
as

    $IF $$dev_env_test $THEN

    PROCEDURE private_proc;

    $END

    FUNCTION public_function return date;

end my_pkg;
/

Essa variável com o sinal de dólar duplo é um sinalizador de compilação condicional.

Se eu descrever o pacote, podemos ver apenas o pacote público:
SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE

SQL>

Agora eu defino o sinalizador condicional e recompilo o pacote, e como que por mágica...
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>

Privatizar as funções é tão simples quanto você pensa que seria:
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>

Podemos fazer muito mais com a compilação condicional. Está coberto nos documentos. Saiba mais.