Ist das SQLScript der SAP HANA Cloud abwärtskompatibel?

Ist das SQLScript der SAP HANA Cloud abwärtskompatibel?

Veröffentlicht am 3. September 2020 von

Jörg Brandeis

| SQLScript |

Bislang hatte ich mir nie Gedanken über die Kompatibilität von SAP HANA Cloud und HANA 2.0 gemacht. Die Abwärtskompatibilität von ABAP ist legendär, da konnte man sich schon immer auf die SAP verlassen. Beim Ausführen der Installationsskripte für das Demo Datenmodell meines Buches ist aber einem aufmerksamen Leser aufgefallen, dass dies in der SQL-Konsole des Database Explorers der SAP HANA Cloud einen Fehler produziert:

chrome 6CPst486nY

Fehlermeldung beim Ausführen des Installationsskripts Nr. 4

Also habe ich mich auf die Suche nach Informationen über die Kompatibilität zwischen SAP HANA 2.0 und SAP HANA Cloud Systemen in Bezug auf SQLScript begeben. Der zentrale Hinweis zu diesem Thema ist 2868742 - Unterschiede zwischen SAP HANA Cloud und SAP-HANA-Plattform für SQL, SQLScript und SAP HDI (SAP HANA Deployment Infrastructure) Der Grund für die Inkompatibilitäten ist angeblich die Speicheroptimierung der Cloud Version von SAP HANA, weshalb manche unwichtigen Features entfernt wurden. Konkrete Unterschiede werden in dem Hinweis nicht genannt, aber die entsprechenden Stellen in der SAP Dokumentation sind verlinkt. Für den Bereich SQL und SQLScript ist die Seite SQL and SQLScript Compatibility des Dokuments SAP HANA Cloud Compatibility Reference verlinkt.

Hier werden alle Features aufgelistet, die nicht mehr unterstützt werden. Die Liste ist erschreckend lang, aber das meiste davon ist für Anwendungsentwickler eher nicht so wichtig. In erster Linie werden DDL und DCL Anweisungen genannt. Der Sprachfeatures, die im Bereich DML und SQLScript allgemein wegfallen, ist relativ übersichtlich. Ich habe hier eine Zusammenfassung erstellt:

  • CE-Funktionen dürfen nicht mehr verwendet werden. Das ist überfällig, nach dem John Appleby schon 2014 einen lesenswerten Nachruf darauf geschrieben hat: Calculation Engine (CE) Functions – Rest in Peace
  • CREATE <user_defined_function_type> FUNCTION - Das muss wohl eine versteckte Syntax sein, denn in der Referenzdokumentation ist diese Variante nicht zu finden.
  • CREATE PROCEDURE … LANGUAGE RLANG - OK, Keine R-Funktionen mehr
  • CREATE PROCEDURE … WITH RESULT VIEW - Statt dessen können Table Functions verwendet werden
  • CALL <Procedure> … WITH VERSION VALIDATION
  • CALL <Procedure> … WITH OVERVIEW
  • SQL-Funktion LANGUAGE(<Text>)
  • Datentyp VARCHAR ist jetzt nur noch als Alias für NVARCHAR verwendet! Gleiches gilt für die Datentypen CLOB und CHAR.
  • Der Datentyp ALPHANUM entfällt. Ebenso die SQL-Funktion TO_ALPHANUM.
  • SELECT … FROM <Hierarchy Column View>
  • SELECT … WHERE CONTAINS … LINGUISTIC
  • SELECT … WHERE CONTAINS … FULLTEXT( { ON | OFF | AUTOMATIC })
  • SELECT … GROUP BY { GROUPING SETS | ROLLUP | CUBE } TEXT_FILTER <Filter> FILL UP SORT MATCHES TO TOP.
  • SELECT … AS OF { COMMIT ID | UTCTIMESTAMP }
  • SELECT … WITH RANGE_RESTRICTION
  • SELECT … WITH HINT ( ) use in subqueries
  • SELECT … WITH DATAPROVISIONING PARAMETERS

Allerdings habe ich in diesen Dokumenten keinen Hinweis darauf gefunden, warum die UPDATE FROM Anweisung nicht unterstützt wird. Auch SAP Hinweis 2241598 - Changed UPDATE FROM syntax can cause ‘invalid table name’ error konnte nicht helfen, obwohl der den Themenbereich betrifft. Vielleicht liegt es aber auch nicht an der Kompatibilität der SAP HANA Cloud, sondern an dem Database Explorer. Hier der Code dazu, vielleicht hat ja irgendwer einen Vorschlag dazu:

	UPDATE tasks
       SET create_date = datum
      FROM :lt_dates AS dates,
		    tasks
      WHERE tasks.id = dates.id;

Das Installationsskript wurde natürlich umgehend aktualisiert, so das es sich jetzt in jeder mir bekannten HANA SQL-Konsole ausführen lässt.

Und noch etwas habe ich gefunden: Statt dem DB-Benutzer SYSTEM soll jetzt der DBADMIN verwendet werden.

Nachtrag vom November 2020

Meine SQLScript E-Learning Kurse habe ich auf die SAP HANA Cloud umgestellt. Dabei ist den Teilnehmern aufgefallen, dass die SQL-Funktion TO_ALPHANUM nicht mehr funktioniert. Das liegt daran, dass der Datentyp ALPHANUM abgeschafft wurde. Als Alternative kann die SQL-Funktion ABAP_ALPHANUM verwendet werden, die seit SPS01 in der HANA 2.0 vorhanden ist.