Seit SAP BW auf HANA läuft, gilt eine Regel: Was die Datenbank rechnen kann, soll die Datenbank rechnen. BW führt eine Transformation dann komplett in HANA aus, statt jedes Paket auf den Anwendungsserver zu holen. ABAP-Routinen wie Start-, End-, Feld- und Expertenroutinen zwingen die Transformation zurück in den ABAP-Stack.
Der Ausweg ist, die Routine als AMDP zu schreiben, also als ABAP-Methode, deren Rumpf in SQLScript direkt in HANA läuft. Diese Reihe zeigt typische ABAP-Muster und konvertiert sie in ein SQLScript.
DELETE
Die ABAP-Routine
Der Delete-Befehl löscht Datensätze aus dem Source Package, hier stornierte Positionen und Positionen ohne Menge.
METHOD start_routine.
DELETE source_package WHERE doc_status = 'X'
OR quantity = 0.
ENDMETHOD.
Die SQLScript-Fassung
In SQLScript gibt es kein DELETE auf einer Tabellenvariablen. Stattdessen wird durch ein WHERE-Statement bestimmt, was bleibt. Die Bedingung ist die Umkehrung der ABAP-Bedingung.
outTab = SELECT *
FROM :inTab
WHERE NOT ( doc_status = 'X' OR quantity = 0 );
Ausgeschrieben ist es meist lesbarer, und die Umkehrung fällt leichter auf, wenn sie einmal falsch ist:
outTab = SELECT *
FROM :inTab
WHERE doc_status <> 'X'
AND quantity <> 0;
Oft kommt nach dem DELETE in ABAP weitere Logik. In SQLScript wird dafür eine Zwischentabelle angelegt:
lt_filtered = SELECT *
FROM :inTab
WHERE doc_status <> 'X'
AND quantity <> 0;
outTab = SELECT *
FROM :lt_filtered;