ABAP SQL Host Expressions

Mit dem ABAP Release 7.50 führte SAP die SQL Host Expressions ein.
Damit ist es möglich, direkt im SQL Statement ABAP Ausdrücke bzw. ABAP Coding zu verwenden.

SELECT … @( HOST-EXPRESSION )

Verwendung

Host Expressions können überall im SQL Statement verwendet werden, wo auch Host Variablen verwendet werden können. Und damit ist auch der primäre Nutzen klar:
Wir können Variablendeklarationen einsparen und damit kompakteren Code schreiben.

Aus 2 Kommandos

wird eines:

Und das funktioniert an vielen Stellen und auch mit funktionalen Methoden (mit Returning Parameter)

aber nicht überall! Bei LIKE und IN geht es leider nicht

Was aber funktioniert, ist die Datenbereitstellung (ITabs oder Workareas) für INSERT, UPDATE, MODIFY und DELETE

Aufgelöst werden die Host Expressions von links beginnend. Bei dem SELECT würden die Methoden in dieser Reihenfolge ausgeführt:

  1. get_table_name
  2. get_partner
  3. get_upto

Performance

Da die Expressions bzw. das ABAP Coding ausgeführt werden muss und die Werte auch, wie bei Hostvariablen, an die Datenbank übertragen werden müssen, ergeben sich keine relevanten Laufzeitunterschiede.

Security

Da die Host Expressions zusammen mit dem SQL Befehl ausgeführt werden, sind sie nur bedingt „debuggbar“ und ein ändern der Werte im Debugger wird erschwert.

Ein super Beispiel, wie wir die Sicherheit unserer Codings durch Host Expressions verbessern können, sehen wir in diesem SELECT:

Mit den entsprechenden Berechtigungen kann der Benutzer den Wert von SY-UNAME im Debugger ändern und Einträge anderer Benutzer selektieren.
Mit einer Hostexpression und der passenden Methode, ist das nicht mehr möglich:

Hinweis: Bei CDS Entities sollte das natürlich über ABAP CDS – Access Control (Data Control Language – DCL) gelöst werden!

Fazit

Host Expressions revolutionieren jetzt nicht die Verwendung von SQL im ABAP Coding. Sie sind aber ein nettes Feature und richtig eingesetzt, machen sie unser Coding kompakter und sicherer!