Blog > Komentarze do wpisu
Wykorzystanie stałych z pakietów w zapytaniach SQL
Definiowanie i wykorzystanie stałych, przynajmniej ja, uważam za dobra praktykę. Zdecydowanie lepsza niż wprowadzanie tej samej, często nieoczywistej, wartości w 20+ rożnych miejscach. Czasami zachodzi także konieczność wykorzystania tych wartości w zapytaniach SQL. Możemy oczywiście dla każdej z nich zdefiniować odpowiednie funkcje publiczne i w większości przypadków sprawdza sie to świetnie co jednak gdy mamy takich stałych kilkadziesiąt? Pakiet i jego specyfikacja rozrosłyby nam się niepotrzebnie.

 

--->>> ZACZYNAMY <<

 

Definiowanie i wykorzystanie stałych, przynajmniej ja, uważam za dobra praktykę. Zdecydowanie lepsza niż wprowadzanie tej samej, często nieoczywistej, wartości w 20+ rożnych miejscach. Czasami zachodzi także konieczność wykorzystania tych wartości w zapytaniach SQL. Możemy oczywiście dla każdej z nich zdefiniować odpowiednie funkcje publiczne i w większości przypadków sprawdza sie to świetnie co jednak gdy mamy takich stałych kilkadziesiąt? Pakiet i jego specyfikacja rozrosłyby nam się niepotrzebnie.

 

Zamiast tego możemy stworzyć jedna, bazującym na dynamicznym kodzie funkcję, a właściwie to kilka funkcji, w zależności od tego jakiego typu jest dana stała (jakiego typu wartość chcemy zwrócić).

 

W pełni funkcjonalny przykład prezentuję poniżej. Może komuś również sie przyda.

 

CREATE OR REPLACE PACKAGE ALLCONSTANTS
IS
   GS_ACTION_PREVIEW CONSTANT          VARCHAR2 (10) := 'PREVIEW';
   GN_STATUS_DO_NOT_PROCESS CONSTANT   NUMBER := 0;

   FUNCTION F_VARCHARCONSTANT(vs_constantname VARCHAR2) RETURN VARCHAR2;
   FUNCTION F_VARCHARCONSTANT(vs_packagename VARCHAR2, vs_constantname VARCHAR2) RETURN VARCHAR2;
   
   FUNCTION F_NUMBERCONSTANT(vs_constantname VARCHAR2) RETURN NUMBER;
   FUNCTION F_NUMBERCONSTANT(vs_packagename VARCHAR2, vs_constantname VARCHAR2) RETURN NUMBER;
   
END ALLCONSTANTS;
/



CREATE OR REPLACE PACKAGE BODY ALLCONSTANTS
IS

   FUNCTION F_VARCHARCONSTANT(vs_constantname VARCHAR2) 
   RETURN VARCHAR2
   IS
      vs_return   VARCHAR2(10);
   BEGIN
      RETURN F_VARCHARCONSTANT('ALLCONSTANTS', vs_constantname);
   END;

   FUNCTION F_VARCHARCONSTANT(vs_packagename VARCHAR2, vs_constantname VARCHAR2) 
   RETURN VARCHAR2
   IS
      vs_return   VARCHAR2(10);
   BEGIN
      EXECUTE IMMEDIATE   'BEGIN :x := ' 
                       || vs_packagename
                       || '.'
                       || vs_constantname
                       || '; end;'
         USING OUT vs_return;

      RETURN vs_return;
   END;

   FUNCTION F_NUMBERCONSTANT(vs_constantname VARCHAR2) 
   RETURN NUMBER
   IS
      vn_return   NUMBER;
   BEGIN
      RETURN F_NUMBERCONSTANT('ALLCONSTANTS', vs_constantname);
   END;
   
   FUNCTION F_NUMBERCONSTANT(vs_packagename VARCHAR2, vs_constantname VARCHAR2)
   RETURN NUMBER
   IS
      vn_return   NUMBER;
   BEGIN
      EXECUTE IMMEDIATE   'BEGIN :x := '
                       || vs_packagename
                       || '.'
                       || vs_constantname
                       || '; end;'
         USING OUT vn_return;

      RETURN vn_return;
   END;
         
END ALLCONSTANTS;
/

 

I przykład użycia w zapytaniu SQL:

 

SELECT   
   ALLCONSTANTS.F_VARCHARCONSTANT ('GS_ACTION_PREVIEW') CONST_VARCHAR,
   ALLCONSTANTS.F_NUMBERCONSTANT ('GN_STATUS_DO_NOT_PROCESS') CONST_NUMBER,
   ALLCONSTANTS.F_VARCHARCONSTANT ('ALLCONSTANTS', 'GS_ACTION_PREVIEW') CONST_VARCHAR_A,
   ALLCONSTANTS.F_NUMBERCONSTANT ('ALLCONSTANTS', 'GN_STATUS_DO_NOT_PROCESS') CONST_NUMBER_A   
FROM DUAL;

 

To na dziś tyle. Pozdrawiam i do następnego razu...

czwartek, 23 czerwca 2011, m0rt1m3r
Tagi: pl/sql oracle

Related Posts Plugin for WordPress, Blogger...

Polecane wpisy





PowerBuilder Tetris
D - Tetris



Programowanie iOS

C# ToolBox

SQL / TSQL / PLSQL ToolBox

Linux / Unix ToolBox





Zaprzyjaznione Strony

Sprite Bandits

Cake Time