RSS
czwartek, 29 maja 2014
Implementacja C# Split() w PL/SQLu

 

Może się zdarzyć, że w tablicy asocjacyjnej musimy przechowywać złożone klucze główne tabel jako ciągi znaków oddzielone przecinkami (comma separated values). Aby łatwo było wyłuskać wartość konkretnego klucza głównego stworzyłęm prostą funkcje f_KeyOnPosition podobną w działania do funkcji Split c#:

 

String pkValue = csvKeys.Split[position];

 

I przykładowe wywołanie mojej implementacji w PL/SQLu:

vs_keyvalue VARCHAR2(100);
vs_keyvalue := f_Split('Ala,ma,3,koty', 3);

 

Zwracany typ VARCHAR2 jest najbardziej uniwersalny. Oczywiście jeśli typ klucza głównego jest inny wartość zwróconą będziemy musieli odpowiednio przekonwertować. Funkcja zwraca null jeśli pozycja klucza jest negatywna lub większa od liczby wartości przechowywanych w ciągu wejściowym, bądź gdy ciąg wejściowy jest null. Funkcja poniżej, być może komuś się przyda:

 

DECLARE
  vs_keystring VARCHAR2(200) := 'Ala,ma,3,koty';
  vs_keyvalue  VARCHAR2(100);
    
  --Careful may not be used in SQL!
  FUNCTION f_Split(vs_keyString VARCHAR2, vn_keyPosition NUMBER) RETURN VARCHAR2
  IS
    keyValue  VARCHAR2(100) := NULL;
  BEGIN
    IF vn_keyPosition > 0 THEN
  
      SELECT trim(regexp_substr (vs_keystring, '[^,]+', 1, vn_keyPosition)) 
        INTO keyValue 
        FROM dual
       WHERE ROWNUM = 1 
      CONNECT BY LEVEL <= LENGTH(regexp_replace (vs_keystring, '[^,]+'))  + 1;  

    END IF;
    
    RETURN keyValue;
  
  END;
  
BEGIN

  vs_keyvalue := f_Split(vs_keystring, 3);
  DBMS_OUTPUT.PUT_line(nvl(vs_keyvalue, 'null'));
  vs_keyvalue := f_Split(vs_keystring, -1);
  DBMS_OUTPUT.PUT_line(nvl(vs_keyvalue, 'null'));
  vs_keyvalue := f_Split(vs_keystring, 4);
  DBMS_OUTPUT.PUT_line(nvl(vs_keyvalue, 'null'));
  vs_keyvalue := f_Split(vs_keystring, 2);
  DBMS_OUTPUT.PUT_line(nvl(vs_keyvalue, 'null'));
  vs_keyvalue := f_Split(vs_keystring, 5);
  DBMS_OUTPUT.PUT_line(nvl(vs_keyvalue, 'null'));
  vs_keyvalue := f_Split(vs_keystring, 1);
  DBMS_OUTPUT.PUT_line(nvl(vs_keyvalue, 'null'));
  
END;
/

 

Rezultat działania:

3
null
koty
ma
null
Ala
Tagi




PowerBuilder Tetris
D - Tetris



Programowanie iOS

C# ToolBox

SQL / TSQL / PLSQL ToolBox

Linux / Unix ToolBox





Zaprzyjaznione Strony

Sprite Bandits

Cake Time