Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Gibt es eine Möglichkeit, zu Testzwecken auf private plsql-Prozeduren zuzugreifen?

Es gibt eine Möglichkeit, dies zu tun, vorausgesetzt, Sie haben 10 g oder mehr. Es heißt Bedingte Kompilierung. Dies ist ein sehr nettes Feature, das eine spezielle Syntax bereitstellt, sodass wir unseren PL/SQL-Code während der Kompilierung ändern können.

Zufällig habe ich diese Funktion genau dazu verwendet, private Pakete in einer Spezifikation offenzulegen, damit ich UTPLSQL-Tests gegen sie ausführen kann.

Hier ist die spezielle Syntax:

create or replace package my_pkg
as

    $IF $$dev_env_test $THEN

    PROCEDURE private_proc;

    $END

    FUNCTION public_function return date;

end my_pkg;
/

Diese Variable mit dem Doppeldollarzeichen ist ein Flag für bedingte Kompilierung.

Wenn ich das Paket beschreibe, sehen wir nur das öffentliche Paket:

SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE

SQL>

Jetzt setze ich das bedingte Flag und kompiliere das Paket neu, und wie von Zauberhand ...

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>

Das Privatisieren der Funktionen ist so einfach, wie Sie denken:

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>

Mit der bedingten Kompilierung können wir noch viel mehr machen. Es ist in den Dokumenten abgedeckt. Erfahren Sie mehr.