Oracle
 sql >> Database >  >> RDS >> Oracle

C'è un modo per accedere alle procedure private plsql a scopo di test?

C'è un modo per farlo, a condizione che tu sia su 10g o superiore. Si chiama Compilazione condizionale. Questa è una funzionalità estremamente accurata che fornisce una sintassi speciale in modo da poter modificare il nostro codice PL/SQL in fase di compilazione.

A quanto pare ho utilizzato questa funzione proprio per esporre i pacchetti privati ​​in una specifica in modo da poter eseguire test UTPLSQL su di essi.

Ecco la sintassi speciale:

create or replace package my_pkg
as

    $IF $$dev_env_test $THEN

    PROCEDURE private_proc;

    $END

    FUNCTION public_function return date;

end my_pkg;
/

Quella variabile con il segno del doppio dollaro è un flag di compilazione condizionale.

Se descrivo il pacchetto possiamo vedere solo il pacchetto pubblico:

SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE

SQL>

Adesso imposto il flag condizionale e ricompilo il pacchetto, e come per 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>

Privatizzare le funzioni è semplice come pensi:

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>

Possiamo fare molto di più con la compilazione condizionale. È trattato nei documenti. Scopri di più.