Die SQL-Dialekt von SAP HANA bietet leider keine „Split“-Funktion, um Zeichenfolgen anhand eines bestimmten Trennzeichens aufzulösen und weiter zu verarbeiten. Seit dem SPS07 gibt es das Repository Element hdbtablefunctions mit welchem das Feature einer SAP HANA Split Function komfortable umgesetzt werden kann.
Wie legt man eine eigene SAP HANA Split Function mit SQLScript in SAP HANA an?
Dazu müssen Sie im SAP HANA Studio eine Datei mit der Endung .hdbtablefunction anlegen und folgendes Coding einfügen. Die Funktion bietet die Möglichkeit einen String und ein Trennzeichen als Parameter zu übergeben. Als Rückgabe wird eine Tabelle mit einem Counter und dem dazugehörigen gesplitteten String ausgegeben.
FUNCTION "SYSTEM"."folder::fn_split_string" ( IP_STRING NVARCHAR(5000), IP_DELIMITER VARCHAR(1) ) RETURNS TABLE (ID INTEGER, VAL NVARCHAR(1000)) LANGUAGE SQLSCRIPT SQL SECURITY INVOKER AS v_out VARCHAR(100):=''; v_count INTEGER:=1; v_substr VARCHAR(1000):=''; v_substr2 VARCHAR(1000):=''; id INTEGER array; val VARCHAR(100) array; BEGIN v_substr:=:ip_string; while(LOCATE (:v_substr, :ip_delimiter) > 0 ) do -- find value v_out := SUBSTR(v_substr, 0, LOCATE (:v_substr, :ip_delimiter) - 1 ); -- out to output id[v_count]:=v_count; val[v_count]:=v_out; -- increment counter v_count:=:v_count+1; -- new substring for search v_substr2 := SUBSTR(:v_substr, LOCATE (:v_substr, :ip_delimiter) + 1, LENGTH(:v_substr)); v_substr := v_substr2; END while; IF(LOCATE (:v_substr, :ip_delimiter) = 0 AND LENGTH(:v_substr) > 0) THEN -- no delimiter in string id[v_count]:=v_count; val[v_count]:=v_substr; END IF; -- format output as tables rst = unnest(:ID,:VAL) AS ("ID","VAL"); RETURN SELECT * FROM :rst; END;
Wie wird die SQL Split Function nun in SAP HANA aufgerufen?
Die Funktion ist dann folgendermaßen über SQL nutzbar. Beispielsweise können so Input Parameter einer Calculation View, die zuerst gesplittet werden müsse, bequem verarbeitet werden.
-- Standard-Aufruf select distinct id, val from "folder::fn_split_string"('test1;test2;test3;', ';'); -- Möglicher Verarbeitung in einem Calculation View var_out = select * from "TABLE" where "ATTRIBUTE" IN ( select distinct val from "folder:fn_split_string"( :ip_param, ';') );
Mit SQLScript lässt sich in SAP HANA sehr gut Business Logik performant umsetzen. Ein weiteres Beispiel haben wir im Beitrag zur SAP HANA Passwort-Generierung dargestellt.
Benötigen Sie Beratungs- oder Entwicklungsunterstützung in Ihrem SAP BW / HANA / SAPUI5 Projekt? Dann zögern Sie nicht und kontaktieren uns unverbindlich unter info@intellify.de.