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

Er der en måde at få adgang til private plsql-procedurer til testformål?

Der er en måde at gøre dette på, forudsat at du er på 10g eller mere. Det kaldes betinget kompilering. Dette er en meget smart funktion, som giver en speciel syntaks, så vi kan ændre vores PL/SQL-kode på kompileringstidspunktet.

Som det sker, har jeg brugt denne funktion netop til at afsløre private pakker i en spec, så jeg kan køre UTPLSQL-test mod dem.

Her er den specielle syntaks:

create or replace package my_pkg
as

    $IF $$dev_env_test $THEN

    PROCEDURE private_proc;

    $END

    FUNCTION public_function return date;

end my_pkg;
/

Denne variabel med dobbelt-dollar-tegnet er et betinget kompileringsflag.

Hvis jeg beskriver pakken, kan vi kun se den offentlige pakke:

SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE

SQL>

Nu sætter jeg det betingede flag og kompilerer pakken igen, og som ved et trylleslag ...

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>

Privatisering af funktionerne er så simpelt, som du tror, ​​det ville være:

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>

Vi kan gøre meget mere med betinget kompilering. Det er dækket af dokumenterne. Få mere at vide.



  1. Hvordan skriver man Django QuerySet for at få UNIX_TIMESTAMP af et DateTimeField?

  2. Er der nogen forskel mellem varchar(10) og varchar(1000), når vi gemmer streng, hvis længde er mindre end 10?

  3. Tidligt interval til at hente data fra db, og stoppe når dataene ankommer

  4. Oracle CTE Merge