sql >> Databasteknik >  >> RDS >> Oracle

Finns det något sätt att komma åt privata plsql-procedurer för teständamål?

Det finns ett sätt att göra detta, förutsatt att du är på 10g eller mer. Det kallas villkorlig sammanställning. Detta är en mycket snygg funktion som tillhandahåller speciell syntax så att vi kan ändra vår PL/SQL-kod vid kompileringstillfället.

Som det händer har jag använt den här funktionen just för att exponera privata paket i en spec så att jag kan köra UTPLSQL-tester mot dem.

Här är den speciella syntaxen:

create or replace package my_pkg
as

    $IF $$dev_env_test $THEN

    PROCEDURE private_proc;

    $END

    FUNCTION public_function return date;

end my_pkg;
/

Variabeln med dubbeldollartecknet är en villkorlig kompileringsflagga.

Om jag beskriver paketet kan vi bara se det offentliga paketet:

SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE

SQL>

Nu ställer jag in den villkorliga flaggan och kompilerar om paketet, och som genom ett trollslag ...

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>

Att privatisera funktionerna är så enkelt som du tror att det skulle vara:

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öra mycket mer med villkorlig sammanställning. Det tas upp i dokumenten. Läs mer.



  1. Ta bort poster inom utlösaren istället för radera

  2. När du behöver köra en REINDEX i postgres

  3. Använda DBCC CLONEDATABASE för att generera ett schema och enbart statistikkopia av en användardatabas i SQL Server 2014 SP2

  4. generera XLS-filer med PL/SQL