Common Table Expressions in ABAP

Im Jahr 1999 wurde die vierte Überarbeitung von SQL unter dem Namen SQL:1999 bzw. SQL3 publiziert.  Unter anderem wurden mit SQL:1999 das WITH Konstrukt zur Verwendung von Common Table Expression eingeführt.

Eine Common Table Expression (CTE) erzeugt eine tabellarische Ergebnisliste welche nur temporär innerhalb einer SQL-Operation zur Verfügung steht.

Die Verwendung ist dann sinnvoll, wenn man z.B. Zwischenergebnisse benötigt, eine komplexe SQL-Anweisung übersichtlicher strukturieren will oder wenn die Zwischenergebnisse mehrfach benötigt werden.

Gerade wenn man sich um Clean Code bemüht, sollten auch CTE zur besseren Lesbarkeit eingesetzt werden.

Ab dem ABAP Release 7.51 stehen die Common Table Expressions nun auch für uns ABAP Entwickler zur Verfüfung.

Syntax

Die Syntax ist recht einfach. Eingeleitet  werden CTEs mit WITH:

  • Durch die optionale Angabe der Spaltennamen mit ( name1, name2, … ) direkt im Anschluss an den CTE Namen, können die Spaltennamen in der CTE Ergebnisliste überschrieben werden
  • Die CTEs müssen in der Hauptabfrage verwendet werden

Beispiele

Im nachfolgenden Beispiel werden Personen und Unternehmen mit CTEs gelesen. Im SELECT werden diese beiden CTEs mit der Relationstabelle BUT050 verknüpft.

In diesem Beispiel wird das Ergebnis der CTE als Subselect im SELECT verwendet.

Ergänzende Hinweise

  • Mit dem WITH Kommando wird die SAP-Pufferung umgangen
  • Sobald man WITH verwendet, wird die Syntaxprüfung mit strikten Modus 7.51 ausgeführt
  • ENDWITH ist ggf. gleich einzusetzen wie ENDSELECT
  • In der SAP Dokumentation sind die CTEs als „allgemeine Tabellenausrücke“ übersetzt

Links

Über Johann Fößleitner

Der SAP Virus hat mich vor über 25 Jahren erfasst. Mein erster Arbeitgeber fragte mich damals, ob mir die Begriffe SAP oder ABAP was sagen. "Nein, nie davon gehört", war meine Antwort. Er meint: "Passt, Sie sind eingestellt". Seit damals verbringe ich einen Großteil meiner Zeit in der SE80 bzw. in den ABAP Development Tools. Wie wäre mein Leben verlaufen, wenn mir SAP schon bekannt gewesen wäre? Keine Ahnung, aber sicher nicht so spannend!

  • Posted by Johann Fößleitner
  • On August 27, 2020
Tags: ABAP SQL, Common Table Expressions, CTE

0 Comments