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;