Oracle
 sql >> Base de données >  >> RDS >> Oracle

Existe-t-il un moyen d'accéder aux procédures plsql privées à des fins de test ?

Il existe un moyen de le faire, à condition que vous soyez sur 10g ou plus. C'est ce qu'on appelle la compilation conditionnelle. Il s'agit d'une fonctionnalité très intéressante qui fournit une syntaxe spéciale afin que nous puissions modifier notre code PL/SQL au moment de la compilation.

Il se trouve que j'ai utilisé cette fonctionnalité précisément pour exposer des packages privés dans une spécification afin de pouvoir exécuter des tests UTPLSQL sur eux.

Voici la syntaxe spéciale :

create or replace package my_pkg
as

    $IF $$dev_env_test $THEN

    PROCEDURE private_proc;

    $END

    FUNCTION public_function return date;

end my_pkg;
/

Cette variable avec le signe du double dollar est un indicateur de compilation conditionnelle.

Si je décris le package, nous ne pouvons voir que le package public :

SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE

SQL>

Maintenant, je mets l'indicateur conditionnel et recompile le paquet, et comme par magie...

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>

Privatiser les fonctions est aussi simple que vous le pensez :

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>

Nous pouvons faire beaucoup plus avec la compilation conditionnelle. C'est couvert dans la doc. En savoir plus.