Ist das SQLScript der SAP HANA Cloud abwärtskompatibel?
Veröffentlicht am 3. September 2020 von | 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:
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 PeaceCREATE <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 mehrCREATE PROCEDURE … WITH RESULT VIEW
- Statt dessen können Table Functions verwendet werdenCALL <Procedure> … WITH VERSION VALIDATION
CALL <Procedure> … WITH OVERVIEW
- SQL-Funktion
LANGUAGE(<Text>)
- Datentyp
VARCHAR
ist jetzt nur noch als Alias fürNVARCHAR
verwendet! Gleiches gilt für die DatentypenCLOB
undCHAR
. - Der Datentyp
ALPHANUM
entfällt. Ebenso die SQL-FunktionTO_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.