Unter dem Begriff Native SQL werden alle Anweisungen und Aufrufe zusammengefasst, die an die
Native-SQL-Schnittstelle
der Datenbankschnittstelle übergeben werden können. Native SQL kann wie folgt an die Datenbankschnittstelle übergeben werden:
Empfohlen werden ADBC und AMDP. Weiterentwicklungen und Verbesserungen, wie z.B. Unterstützung
neuer SQL-Anweisungen oder Performance-Optimierungen durch Mengenzugriffe über interne Tabellen,
werden nur noch für ADBC und AMDP durchgeführt. Die vorhandene statische Einbettung von
Native-SQL-Anweisungen zwischen EXEC SQL
und ENDEXEC wird zwar weiterhin unterstützt, sollte in neuen Programmen aber nicht mehr verwendet werden.
Hinweise
Bei der Verwendung von Native SQL ist zu beachten, dass bei Datenbanktabellen, die im ABAP Dictionary
definiert sind, die Reihenfolge der Spalten im Datenbanksystem nicht mit der Reihenfolge der Strukturdefinition im ABAP Dictionary übereinstimmen muss. Bei der Verwendung von
Open SQL wird dies in der
Datenbankschnittstelle
entsprechend berücksichtigt und es kann immer von der Reihenfolge des ABAP Dictionary ausgegangen
werden. Bei der Verwendung von Native SQL muss die Reihenfolge der Spalten im Datenbanksystem in aller Regel selbst berücksichtigt werden. Nur bei Verwendung von
AMDP werden die Ergebnisse falls möglich auch in die Reihenfolge des ABAP Dictionary gebracht.
Bei der Verwendung von Native SQL ist besondere Vorsicht bei der Datenübergabe von ABAP an
das Datenbanksystem und umgekehrt geboten. Dies betrifft die Verwendung von ABAP-Datenobjekten als Hostvariablen
oder gebundene Parameter in Native-SQL-Anweisungen sowie die Anbindung von ABAP-Datenobjekten an die
Parameterschnittstelle von Stored Procedures bzw. Datenbankprozeduren. Nicht alle eingebauten ABAP-Typen
haben Entsprechungen im Typsystem des verwendeten Datenbanksystems. Während das notwendige Mapping
bei der Verwendung von Open SQL im ABAP Dictionary definiert ist und von der Open-SQL-Schnittstelle
durchgeführt wird, muss man sich bei der Verwendung von Native SQL in der Regel selbst darum
kümmern. Dies betrifft insbesondere die ABAP-Typen n, d, t und dezimale Gleitpunktzahlen.
Native SQL unterstützt keine automatische
Mandantenbehandlung.
Beim Zugriff auf mandantenabhängige Datenbanktabellen oder Views muss die gewünschte Mandantenkennung
explizit selektiert werden. In Anwendungsprogrammen sollte dafür nur der aktuelle Mandant verwendet werden.
Bei einem Native-SQL-Zugriff auf die CDS-Datenbank-View einer
mandantenabhängigen CDS-View, deren Mandantenbehandlung
durch die Annotation @ClientHandling.algorithm:#SESSION_VARIABLE bestimmt wird, ist zu beachten, dass die implizit in der View verwendete
Sitzungsvariable$session.client nur auf einer
SAP-HANA-Datenbank garantiert
als HANA-Sitzungsvariable CDS_CLIENT
ausgeprägt ist. Dort wird deren aktueller Wert verwendet. Auf anderen Plattformen kann es zu unerwartetem Verhalten oder zu einem Programmabbruch kommen.
Abgesehen von syntaktischen Unterschieden können sich Native-SQL-Anweisungen auf verschiedenen Plattformen unterschiedlich und insbesondere auch unterschiedlich zu Open SQL verhalten. Dies betrifft u.a.:
Behandlung von Leerzeichen in Zeichenketten
Rechenregeln und Rundungen in arithmetischen Berechnungen
Verhalten bei Überläufen
Das genaue Verhalten ist der jeweiligen Dokumentation des herstellerspezifischen Native SQL zu entnehmen.