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’.

Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)

Leave a Comment