sql >> Databáze >  >> RDS >> Oracle

Existuje způsob, jak získat přístup k soukromým procedurám plsql pro účely testování?

Existuje způsob, jak to udělat, za předpokladu, že máte 10 g nebo vyšší. Říká se tomu podmíněná kompilace. Toto je velmi úhledná funkce, která poskytuje speciální syntaxi, takže můžeme změnit náš PL/SQL kód během kompilace.

Stává se, že jsem tuto funkci používal přesně k odhalení soukromých balíčků ve specifikaci, abych proti nim mohl spouštět testy UTPLSQL.

Zde je speciální syntaxe:

create or replace package my_pkg
as

    $IF $$dev_env_test $THEN

    PROCEDURE private_proc;

    $END

    FUNCTION public_function return date;

end my_pkg;
/

Tato proměnná se znakem dvojitého dolaru je příznak podmíněné kompilace.

Pokud popíšu balíček, můžeme vidět pouze veřejný balíček:

SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE

SQL>

Nyní nastavím podmíněný příznak a znovu zkompiluji balíček a jako mávnutím kouzelného proutku ...

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>

Privatizace funkcí je tak jednoduchá, jak si myslíte, že by byla:

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>

S podmíněnou kompilací dokážeme mnohem více. Je to zahrnuto v dokumentech. Další informace



  1. Jak Group_Concat() funguje v SQLite

  2. Správný fulltextový index Rails/PostgreSQL/pg_search

  3. Jak navrhnu tabulku, která bude ukládat velmi velká data?

  4. Databáze Python a MySQL:Praktický úvod