Im vorherigen Artikel, “CASE in SAP HANA - Ablaufsteuerung von SQLScript Transformationsroutinen”, haben Sie gelernt, dass IF ELSE Konstrukte innerhalb eines SELECT Statements nicht möglich sind. Um diese Kontrollstrukturen in SQLScript umzusetzen, können Sie jedoch die native CASE WHEN Anweisung nutzen.
Allerdings heißt es nicht, dass IF ELSE Befehle in SQLScript keine Anwendung finden. Diese können nämlich weiterhin in imperativer Logik als Konditionale verwendet werden. In diesem Artikel erläutere ich die Anwendung von IF ELSE und bringe auch ein konkretes Beispiel zur Verdeutlichung.
Syntax
Die Syntax der ELSE IF Anweisung in SQLScript gleicht der in ABAP und lautet wie folgt.
IF Bedingung1
THEN
Anweisung1
[ELSEIF Bedingung2
THEN
Anweisung2...]
[ELSE
Anweisung]
END IF
Bei den Bedingungen können Sie die folgenden Vergleichsoperatoren verwenden:
Operator |
Beschreibung |
= |
Gleich |
> |
Größer als |
< |
Kleiner als |
>= |
Größer / gleich |
<= |
Kleiner / gleich |
!=, <> |
Ungleich |
Mit der IF-Anweisung können Sie eine Kontrollstruktur definieren, die mehrere Anweisungen enthalten kann. Allerdings wird von den mehreren Anweisungen nur eine ausgeführt. Welche das ist, hängt von den booleschen Bedingungen ab, die definiert werden. Die Bedingungen werden von oben nach unten überprüft und die Anweisung hinter der ersten wahren Bedingung ausgeführt. Falls keine der Bedingungen wahr ist, wird der Anweisungsblock hinter ELSE ausgeführt. Wenn keine ELSE Anweisung definiert wurde, wird die Verarbeitung nach END IF fortgesetzt.
Standardmäßig besteht die IF-Anweisung aus einem booleschen Ausdruck und einem THEN Block. Die übrigen Teile sind optional. In der Praxis werden Sie jedoch einen ELSE Zweig verwenden. Falls die erste Bedingung nicht zutrifft, wird die Anweisung hinter dem ELSE Zweig ohne weitere Prüfungen ausgeführt. Nach einem ELSE Befehl sind keine weiteren ELSE oder ELSEIF Zweige erlaubt. Vor dem ELSE Befehl können Sie jedoch beliebig viele ELSEIF Klauseln anhängen.
Steigern Sie die Leistung Ihres BW mit SQLScript
Beispiel
Zum besseren Verständnis erläutere ich die Funktionsweise anhand eines Beispiels. Dabei soll eine Währungsumrechnung durchgeführt werden. Wie Sie eine Währungsumrechnung mit SQLScript durchführen, erfahren Sie in unserem Beitrag “Währungsumrechnung mit SAP HANA SQLScript in Transformationsroutinen”.
Das Stichdatum für die Währungsumrechnung soll anhand eines IF ELSE Konstrukts bestimmt werden. Wenn die Währungsumrechnung im ersten Halbjahr durchgeführt wird, soll mit den Kursen des Vorjahres gerechnet werden. Ansonsten wird das aktuelle Datum als Stichdatum genutzt.
DECLARE lv_date nvarchar(10);
*current_date is YYYY-MM-DD
SELECT SUBSTRING (TO_DATS(current_date),1,6) INTO lv_date FROM DUMMY;
IF lv_date <= 202106
THEN
lv_date = '2020-12-01';
ELSE
SELECT to_nvarchar (current_date) INTO lv_date FROM DUMMY ;
END IF;
Den vollständigen Code finden Sie anbei.
Code
METHOD PROCEDURE BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY.
DECLARE lv_date nvarchar(10);
*current_date is YYYY-MM-DD
SELECT SUBSTRING (TO_DATS(current_date),1,6) INTO lv_date FROM DUMMY;
IF lv_date <= 202106
THEN
lv_date = '2020-12-01';
ELSE
SELECT to_nvarchar (current_date) INTO lv_date FROM DUMMY ;
END IF;
outTab =
SELECT comp_code, calmonth,
'EUR' AS loc_currcy,
doc_currcy,
recordmode,
CONVERT_CURRENCY( AMOUNT => deb_cre_dc,
SOURCE_UNIT => doc_currcy,
SCHEMA => 'SAPABAP1',
TARGET_UNIT => 'EUR',
REFERENCE_DATE => :lv_date,
CLIENT => '100',
CONVERSION_TYPE => 'EURX')
AS deb_cre_lc,
deb_cre_dc,
record, SQL__PROCEDURE__SOURCE__RECORD
FROM :inTab;
ERRORTAB= SELECT * FROM :ERRORTAB;
ENDMETHOD.
IF ELSE statements - Unser Fazit
Obwohl IF ELSE Befehle innerhalb von SQLScript SELECT Statements nicht vorgesehen sind, können Sie diese wie gewohnt bei der imperativen Ablaufsteuerung nutzen. Ich hoffe, dass Ihnen dieser Beitrag weitergeholfen hat.
Planen Sie einen Umstieg auf SQLScript und benötigen Sie Unterstützung bei der Planung der richtigen Strategie? Oder benötigen Sie erfahrene Entwickler zur Umsetzung Ihrer Anforderungen? Zögern Sie bitte nicht, uns zu kontaktieren - wir beraten Sie gerne.