Ansicht
Dokumentation

ABENABAP_OBJECTS_DIFF_SQL - ABAP OBJECTS DIFF SQL

ABENABAP_OBJECTS_DIFF_SQL - ABAP OBJECTS DIFF SQL

BAL_S_LOG - Application Log: Log header data   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Syntaxverschärfungen bei Datenbankzugriffen

Verbot von Kurzformen

Bei jeder SQL-Anweisung müssen in ABAP Objects explizite Arbeitsbereiche angegeben werden. Hierfür können typgerechte Datenobjekte mit Bezug auf die Definition der Datenbank im ABAP Dictionary angelegt werden.

In ABAP Objects Fehlermeldung bei:

SELECT ... FROM dbtab

INSERT dbtab.

UPDATE dbtab.

DELETE dbtab.

MODIFY dbtab.

Korrekte Syntax:

DATA wa TYPE dbtab.

SELECT ... FROM dbtab INTO wa.

INSERT dbtab FROM wa.
oder
INSERT INTO dbtab VALUES wa.

UPDATE dbtab FROM wa.
oder
UPDATE dbtab SET ... .

DELETE dbtab FROM wa.
oder
DELETE FROM dbtab WHERE ...

MODIFY dbtab FROM wa.

Grund:

Eindeutige Trennung von Datenbanknamen und ABAP-Arbeitsbereich. Programme werden leichter lesbar. Für das Arbeiten mit Kurzformen ist die Deklaration von Tabellenarbeitsbereichen mit der in ABAP Objects verbotenen TABLES-Anweisung notwendig.

Anmerkung:

Dies gilt nicht für SELECT-Anweisungen in Subqueries. Bei Subqueries ist keine INTO-Klausel erlaubt. Siehe das EXISTS-Konstrukt der WHERE- und HAVING-Klauseln von SELECT, UPDATE, DELETE und OPEN CURSOR.

Verbot des *-Arbeitsbereichs

Die Angabe von *-Arbeitsbereichen als Bezeichner für Datenbanktabellen und Arbeitsbereiche ist in ABAP Objects verboten.

In ABAP Objects Fehlermeldung bei:

SELECT ... FROM *dbtab INTO ...

INSERT *dbtab.

UPDATE *dbtab.

DELETE *dbtab.

MODIFY *dbtab.

Korrekte Syntax:

DATA wa TYPE dbtab.

SELECT ... FROM dbtab INTO wa.

INSERT dbtab FROM wa.
oder
INSERT INTO dbtab VALUES wa.

UPDATE dbtab FROM wa.
oder
UPDATE dbtab SET ... .

DELETE dbtab FROM wa.
oder
DELETE FROM dbtab WHERE ...

MODIFY dbtab FROM wa.

Grund:

Die Deklaration typgerechter Arbeitsbereiche mit der DATA-Anweisung ersetzt die Deklaration von *-Arbeitsbereichen. *-Arbeitsbereiche können nur mit der in ABAP Objects verbotenen TABLES-Anweisung deklariert werden. *-Arbeitsbereiche können nur in den verbotenen Kurzformen der Open-SQL-Anweisungen verwendet werden.

Verbot von READ TABLE

Die Anweisung READ TABLE zum Lesen von Daten aus Datenbanktabellen ist in ABAP Objects verboten.

In ABAP Objects Fehlermeldung bei:

t100 = space.
t100-sprsl = 'D'.
t100-arbgb = 'BC'.
t100-msgnr = '100'.

READ TABLE t100.

Korrekte Syntax:

DATA wa TYPE t100.

SELECT SINGLE * FROM t100 INTO wa WHERE sprsl = 'D'  AND
                                        arbgb = 'BC' AND
                                        msgnr = '100'.

Grund:

Die Anweisung wird von der Open-SQL-Anweisung SELECT ersetzt. Sie arbeitet nur mit Datenbanktabellen, deren Namen den Namenskonventionen für R/2-ATAB-Tabellen entsprechen (maximal fünf Stellen und ein T an der ersten Stelle), und mit über TABLES deklarierten Tabellenarbeitsbereichen, die in ABAP Objects verboten sind. Für die Zugriffe werden generische Schlüsselwerte verwendet, die linksbündig dem belegten Teil des Tabellenarbeitsbereichs entnommen werden. Die Schlüsselangabe soll stattdessen explizit in der WHERE-Klausel der SELECT-Anweisung geschehen.

Verbot von LOOP AT

Die Anweisung LOOP AT zum Lesen von Daten aus Datenbanktabellen ist in ABAP Objects verboten.

In ABAP Objects Fehlermeldung bei:

t100 = space.
t100-sprsl = 'D'.
t100-arbgb = 'BC'.
t100-msgnr = '1'.

LOOP AT t100.
  ...
ENDLOOP.

Korrekte Syntax:

DATA wa TYPE t100.

SELECT * FROM t100 INTO wa WHERE sprsl = 'D'  AND
                                 arbgb = 'BC' AND
                                 msgnr LIKE '1%'.
  ...
ENDSELECT.

Grund:

Die Anweisung wird von der Open-SQL-Anweisung SELECT ersetzt. Sie arbeitet nur mit Datenbanktabellen, deren Namen den Namenskonventionen für R/2-ATAB-Tabellen entsprechen (maximal fünf Stellen und ein T an der ersten Stelle), und mit über TABLES deklarierten Tabellenarbeitsbereichen, die in ABAP Objects verboten sind. Für die Zugriffe werden generische Schlüsselwerte verwendet, die linksbündig dem belegten Teil des Tabellenarbeitsbereichs entnommen werden. Die Schlüsselangabe soll stattdessen explizit in der WHERE-Klausel der SELECT-Anweisung geschehen.

Verbot von REFRESH FROM

Die Anweisung REFRESH FROM zum Lesen von Daten aus Datenbanktabellen ist in ABAP Objects verboten.

In ABAP Objects Fehlermeldung bei:

t100 = space.
t100-sprsl = 'D'.
t100-arbgb = 'BC'.
t100-msgnr = '1'.

REFRESH itab FROM TABLE t100.

Korrekte Syntax:

DATA wa TYPE t100.

SELECT * FROM t100 INTO TABLE itab WHERE sprsl = 'D'  AND
                                         arbgb = 'BC' AND
                                         msgnr LIKE '1%'.

Grund:

Die Anweisung wird von der Open-SQL-Anweisung SELECT ersetzt. Sie arbeitet nur mit Datenbanktabellen, deren Namen den Namenskonventionen für R/2-ATAB-Tabellen entsprechen (maximal fünf Stellen und ein T an der ersten Stelle), und mit über TABLES deklarierten Tabellenarbeitsbereichen, die in ABAP Objects verboten sind. Für die Zugriffe werden generische Schlüsselwerte verwendet, die linksbündig dem belegten Teil des Tabellenarbeitsbereichs entnommen werden. Die Schlüsselangabe soll statt dessen explizit in der WHERE-Klausel der SELECT-Anweisung geschehen.

Verbot des VERSION-Zusatzes

Der Zusatz VERSION in den Open-SQL-Anweisungen DELETE und MODIFY (und natürlich auch in den obsoleten Anweisungen READ TABLE und LOOP AT) ist in ABAP Objects verboten.

In ABAP Objects Fehlermeldung bei:

DELETE dbtab VERSION vers.
MODIFY dbtab VERSION vers.

Korrekte Syntax:

vers = 'T' && vers.

DELETE (vers) FROM dbtab.
MODIFY (vers) FROM dbtab.

Grund:

Der Zusatz VERSION funktioniert nur mit Datenbanktabellen, deren Namen den Namenskonventionen für R/2-ATAB-Tabellen entsprechen. Die dynamische Angabe der Datenbanktabelle über eingeklammerte Feldnamen ersetzt den Zusatz VERSION.

Falsche logische Operatoren in der WHERE-Klausel

Die logischen Operatoren >< , =< und => sind in ABAP Objects verboten.

In ABAP Objects Fehlermeldung bei:

... >< ... =< ... => ...

Korrekte Syntax:

... &lt;&gt; ... <= ... >= ...

Grund:

Diese Operatoren für ungleich, kleiner gleich und größer gleich sind überflüssig. Sie haben die gleich Funktionalität wie &lt;&gt; , <= und >= (oder auch NE, LE und GE).

Verbot des Unterprogrammaufrufs in EXEC SQL

Die Möglichkeit, mit Native SQL gelesene Daten über den Zusatz PERFORMING der Anweisung EXEC SQL zeilenweise in einem Unterprogramm auszuwerten, ist in ABAP Objects verboten, ebenso die Anweisung EXIT FROM SQL, die während der Verarbeitung des Unterprogramms ausgeführt werden kann.

In ABAP Objects Fehlermeldung bei:

EXEC SQL PERFORMING form.
  select ... into :wa from dbtab where ...
ENDEXEC.

FORM form.
  ...
  EXIT FROM SQL.
  ...
ENDFORM.

Korrekte Syntax:

EXEC SQL.
  open c1 for
  select ... from dbtab where ...
ENDEXEC.

DO.
  EXEC SQL.
    fetch next c1 into :wa
  ENDEXEC.
  IF sy-subrc &lt;&gt; 0.
    EXIT.
  ENDIF.
  ...
ENDDO.

EXEC SQL.
  close c1
ENDEXEC.

Grund:

In lokalen Klassen sollen und in globalen Klassen können keine Unterprogramme des Rahmenprogramms aufgerufen werden. Das aufgerufene Unterprogramm hat keine Schnittstelle und arbeitet mit den globalen Daten des Rahmenprogramms. Die Anweisung EXIT FROM SQL beendet eine SQL-Verarbeitung losgelöst von der eigentlichen SQL-Anweisung.






General Data in Customer Master   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 12006 Date: 20240523 Time: 160811     sap01-206 ( 164 ms )