Ansicht
Dokumentation
ABENABAP_OBJECTS_DIFF_SQL - ABAP OBJECTS DIFF SQL
BAL_S_LOG - Application Log: Log header data BAL Application Log DocumentationDiese Dokumentation steht unter dem Copyright der SAP AG.
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:
... <> ... <= ... >= ...
Grund:
Diese Operatoren für ungleich, kleiner gleich und größer gleich sind überflüssig. Sie haben die gleich Funktionalität wie <> ,
<= 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 <> 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 )