Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czy istnieje sposób na dostęp do prywatnych procedur plsql do celów testowych?

Jest na to sposób, pod warunkiem, że ważysz 10g lub więcej. Nazywa się to kompilacją warunkową. Jest to bardzo fajna funkcja, która zapewnia specjalną składnię, dzięki czemu możemy zmienić nasz kod PL/SQL w czasie kompilacji.

Tak się złożyło, że używałem tej funkcji właśnie po to, aby ujawnić prywatne pakiety w specyfikacji, aby móc przeprowadzać na nich testy UTPLSQL.

Oto specjalna składnia:

create or replace package my_pkg
as

    $IF $$dev_env_test $THEN

    PROCEDURE private_proc;

    $END

    FUNCTION public_function return date;

end my_pkg;
/

Ta zmienna ze znakiem podwójnego dolara jest flagą kompilacji warunkowej.

Jeśli opiszę pakiet, możemy zobaczyć tylko pakiet publiczny:

SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE

SQL>

Teraz ustawiam flagę warunkową i ponownie kompiluję pakiet i jak za dotknięciem czarodziejskiej różdżki...

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>

Prywatyzacja funkcji jest tak prosta, jak myślisz:

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>

Dzięki kompilacji warunkowej możemy zrobić o wiele więcej. Jest to opisane w dokumentach. Dowiedz się więcej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wsparcie Spring JDBC i duży zbiór danych

  2. Czy ODP.NET wymaga instalacji klienta Oracle?

  3. Jak mogę uzyskać wartości z jednej tabeli do drugiej za pomocą podobnych wartości?

  4. Czy Oracle NetSuite Advanced PDF Template ma funkcje Group by i SUM?

  5. Oracle SQL INNER Join na podstawie niepasujących wartości