EXEC SQL
Open SQL vs. Native SQL
ABAP verwendet für die Datenbankzugriffe Open SQL. Das ist ein Format, das Datenbank unabhängig ist. Dadurch ist es möglich, eine durchgängige ABAP-Syntax zu haben, unabhängig davon, welche Datenbank verwendet wird.
Unterschiede werden hier ganz gut erklärt:
https://blogs.sap.com/2006/06/26/open-sql-vs-native-sql/
Open SQL
Durch den Zugriff mittels Open SQL sind die Zugriffe auf die Datenbank genormt und beschnitten. Nicht jede Funktionalität, die eine Datenbank bietet, wird von Open SQL unterstützt.
Native SQL
Es können im ABAP-Umfeld Native SQL Anweisungen ausgeführt werden. Diese müssen mittels EXEC-SQL definiert werden.
Anwendungsbeispiel “upper”
Im Folgenden wird ein SELECT-Befehl in einer EXEC SQL-Klammer ausgeführt. Der SELECT bietet dann mehr Möglichkeiten. In diesem Beispiel wird ein gelesenes Feld mit dem Native SQL-Befehl “upper” in GROß-Buchstaben umgewandelt.
In dem folgenden Coding wird in der Länderbezeichnung der Ländertabelle T005T, die als “lower-case” gespeichert ist, nach einem Wert gesucht.
Code
REPORT Z. DATA: itab like t005t OCCURS 0 WITH HEADER LINE, BEGIN OF i_exec OCCURS 0, spras LIKE t005t-spras, landx LIKE t005t-landx, END OF i_exec. *** Zu suchender Text in der Länderbezeichnung PARAMETERS: p1 LIKE t005t-landx DEFAULT '*SCH*'. START-OF-SELECTION. *** Umsetzung der Wildcards für SELECT TRANSLATE p1 USING '*%+_'. TRANSLATE p1 TO UPPER CASE. *** EXEC SQL EXEC SQL PERFORMING WRITE_INTO_TABLE. SELECT SPRAS, LANDX, NATIO INTO :ITAB-SPRAS, :ITAB-LANDX, :ITAB-NATIO FROM T005T WHERE MANDT = :SY-MANDT AND UPPER(LANDX) LIKE :P1 ENDEXEC. *** Ausgabe der selektierten Länder LOOP AT i_exec. WRITE:/ i_exec. ENDLOOP. ************************************************** * FORM write_into_table ************************************************** FORM write_into_table. MOVE-CORRESPONDING itab TO i_exec. APPEND i_exec. ENDFORM.
Groß-Kleinschreibung Code
Eventuell muss darauf geachtet werden, dass die Feldnamen case-sensitiv sind (MS-SQL; Hinweis 459676).
Groß-Kleinschreibung Text
Sonderzeichen und Umlaute sind problematisch. Der String “Bäcker” wird mit der Metode evtl. nicht gefunden, da der Native-SQL-Zugriff die Sonderzeichen nicht korrekt umwandelt.
SQL-Fehler
SQL-Fehler 207 oder 208 bei EXEC SQL oder ADBC-Zugriff auf Tabelle
207 Invalid column name ‘<name>’.
208 Invalid object name ‘<name>’.
Falls ein verkehrter Feldname angegeben wird – z.B. MANDT anstelle von CLIENT – dann wird ein Kurzdump erzeugt. Dort taucht aber nur der Fehler 207 auf. Im Syslog SM21 stehen dann genauere Informationen:
Laufzeitfehler “DBIF_DSQL2_SQL_ERROR” aufgetreten.
> Kurzdump “080311 131016 xserver02 _XPO_00 ” erstellt.
Datenbankfehler 207 beim OPC aufgetreten
> Invalid column name ‘MANDT’.Invalid column name
> ‘addrnumber’.Invalid column name ‘name1’.
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024