sql >> Base de Datos >  >> RDS >> Oracle

¿Hay alguna forma de acceder a los procedimientos privados de plsql con fines de prueba?

Hay una manera de hacer esto, siempre que tenga 10 g o más. Se llama compilación condicional. Esta es una característica muy interesante que proporciona una sintaxis especial para que podamos cambiar nuestro código PL/SQL en el momento de la compilación.

Da la casualidad de que he estado usando esta función precisamente para exponer paquetes privados en una especificación para poder ejecutar pruebas UTPLSQL contra ellos.

Aquí está la sintaxis 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;
/

Esa variable con el doble signo de dólar es una marca de compilación condicional.

Si describo el paquete, solo podemos ver el paquete público:

SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE

SQL>

Ahora configuro el indicador condicional y vuelvo a compilar el paquete, y como por arte de magia...

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 las funciones es tan simple como cree que sería:

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 hacer mucho más con la compilación condicional. Está cubierto en los documentos. Más información