Open SQL Anweisungen in ABAP

Dieser Beitrag ist Teil des Kurses ABAP Grundlagen.

Das Modifizieren von Tabelleninhalten auf der Datenbankebene erfolgt durch Open-SQL-Anweisungen. Dabei handelt es sich um spezielle ABAP Befehle, die eine einheitliche Syntax für alle Datenbanksysteme sicherstellen. Für den Einstieg in ABAP sind folgende Anweisungen wichtig, um Tabelleninhalte zu modifizieren:

Durch einen Erfahrungsaustausch lässt sich viel voneinander lernen. Tauschen Sie sich deshalb jetzt mit Experten auf Ihrem Gebiet aus und erweitern Sie Ihr Netzwerk! Treten Sie jetzt der exklusiven Gruppe von SAP Experten bei.

SELECT, INSERT, UPDATE, MODIFY, DELETE.


SELECT
Eine der wichtigsten Anweisungen ist sicherlich SELECT. Zum Beispiel:

DATA ls_ztabelle TYPE ztabelle.
SELECT * FROM ztabelle INTO ls_ztabelle.
WRITE / ls_ztabelle.
ENDSELECT.

Der SELECT-Befehl bedeutet, dass die Sätze aus der Tabelle ztabelle Satz für Satz (Zeile für Zeile) in die Struktur bzw. Workarea/Arbeitsbereich (Zeile) übertragen werden. Mit der Sternchen * werden alle Felder eines Satzes übertragen. Die Anweisung SELECT entspricht in dieser Form einer Schleifenverarbeitung. Damit werden alle Sätze der Datenbanktabelle Satz für Satz in die Programmstruktur übertragen.
Fall wir an nur einem Eintrag (der ersten gefundene Zeile) interessiert sind, verwenden wir SINGLE nach dem SELECT Statement.

SELECT SINGLE * FROM ztabelle INTO ls_ztabelle WHERE zfeld = 'xyz'.

Dabei werden alle Spalten (*) einer Zeile mit dem Wert zfeld = 'xyz' gelesen. Durch den Aufruf des SELECT Statements wird die Systemvariable sy-subrc gesetzt. Das Feld sy-subrc gibt das Ergebnis der SELECT-Operation in Form eines Wertes aus. Falls sy-subrc den Wert 0 hat, dann war alles in Ordnung, und ein Ergebnis liegt vor. Falls der Wert ungleich 0 ist, ist etwas schiefgelaufen, oder es wurden keine Daten gefunden. Falls Daten gefunden wurden, wird die Anzahl der gefundenen Datensätze in sy-dbcnt geschrieben.
Um eine interne Tabelle zu füllen, erweitern Sie den Befehl um die Syntax INTO TABLE.

SELECT * FROM ztabelle INTO TABLE lt_ztabelle.

Ein kurzer Exkurs zu Tabellen, Strukturen und Workareas. Mit dem Schritt

DATA ls_ztabelle TYPE ztabelle.

wird eine Datenstruktur angelegt, die den gleichen Aufbau (gleiche Felder) wie die Datenbanktabelle ztabelle besitzt. Eine Tabellenzeile wird normalerweise mit „wa_“ oder „ls_“ deklariert. Dabei steht „wa_“ für Workarea/Arbeitsbereich und „ls_“ für local structure. Allerdings bedeutet es das gleiche, nämlich eine einfache Tabellenzeile. Auch ein FIELD-SYMBOL ist eine Struktur, also eine Zeile. Aber dazu später mehr.


INSERT
Auch der Befehl INSERT ist wichtig. Damit fügen Sie einen oder mehrere neue Datensätze, also neue Zeilen, in eine Datenbanktabelle ein.
In der Regel wird der Inhalt einer Workarea oder lokalen Struktur als neue Zeile in die Datenbanktabelle kopiert. Der neue Datensatz wird mit folgendem Befehl eingefügt:

INSERT ztabelle FROM ls_ztabelle.

Wenn der Kopiervorgang funktioniert hat, wird die lokale Sturktur bzw. Workarea mit der Anweisung CLEAR initialisiert und für den nächsten Datensatz neu aufgebaut. Hierdurch wird eine vollständige Trennung zwischen dem Arbeitsbereich für den zuletzt gelesenen und dem neuen Satz erreicht. So stellen Sie sicher, dass wirklich alle Felder den richtigen, neuen Inhalt bekommen und keine unerwünschten Mischformen entstehen. Selbst wenn bei dem neuen Datensatz weniger Felder gefüllt sind als beim alten.


UPDATE
Einen bestehenden Datensatz können Sie mit der Anweisung UPDATE ändern. Wenn Sie mit einer Workarea oder lokalen Struktur arbeiten, modifizieren Sie diese und aktualisieren anschließend die entsprechende Zeile der Datenbank mit der folgenden Anweisung:

UPDATE ztabelle FROM ls_ztabelle.

Der Name der Datenbanktabelle könnte auch dynamisch vergeben werden. Die Variable, die für die zu füllende Tabelle steht, muss aus semantischen Gründen ohne Leerzeichen in Klammern stehen. Dies gilt für alle Befehle in diesem Beitrag. Zum Beispiel:

DATA lv_zieltabelle TYPE string.
lv_zieltabelle = 'ztable'.
UPDATE (lv_zieltabelle) FROM ls_ztabelle.

Existiert ein Datensatz in der Datenbanktabelle mit demselben Primärschlüssel, wird dieser Satz aktualisert und der Returncode sy-subrc = 0 ausgegeben. Falls das System jedoch keinen Satz mit diesem Primärschlüssel in der Datenbanktabelle findet, bleibt die Tabelle unverändert. Der Returncode hat dann den Wert 4.


MODIFY
Den MODIFY-Befehl können Sie verwenden, wenn Sie sich nicht ganz sicher sind, ob dieser Satz in der Tabelle bereits existiert. Wenn es der Fall ist, wird dieser geändert. Die Anweisung verhält sich wie UPDATE. Wenn es den Satz noch nicht gibt, verhält sich die Anweisung wie INSERT. Dieser Befehl hat die schlechtere Performance als die „spezialisierten“ Befehle INSERT und UPDATE. Deshalb sollten Sie es nur dann verwenden, wenn die Programmlogik es erfordert, beide Möglichkeiten offen zu halten. Die Syntax lautet:

MODIFY ztabelle FROM ls_ztabelle.


DELETE
Wenn Sie Datensätze aus einer Datenbanktabelle löschen möchten, verwenden Sie das DELETE Kommando. Sie müssen aber auf der Hut sein, denn mit DELETE können Sie neben einzelnen Zeilen auch ganze Tabelleninhalte löschen. Diese gehen dann unwiederbringlich verloren.
Um einen Datensatz der Datenbanktabelle in Bezug auf eine Workarea zu löschen, genügt die Angabe des zutreffenden Primärschlüssels. Füllen Sie also die lokale Struktur (Workarea) mit dem zu löschenden Primärschlüssel und löschen Sie anschließend die entsprechende Zeile in der Datenbanktabelle:

DELETE ztabelle FROM ls_ztabelle.

Sie können auch die zu löschenden Zeilen über eine Bedingung ansprechen:

DELETE FROM ztabelle WHERE zfeld = 'xyz'.

Vorsicht! Mit dem folgenden kleinen Befehl löschen Sie alle Zeilen aus der Tabelle:

DELETE FROM ztabelle.

Alle genannten Anweisungen liefern einen Returncode und füllen das Systemfeld SY-SUBRC. Wenn der Wert 0 geliefert wird, ist alles OK und die Anweisung konnte problemlos ausgeführt werden.

Diese ABAP Tricks machen Ihr Leben leichter!

  • In meinem Newsletter gebe ich eine Menge Tipps und Kniffe rund um ABAP.
  • Die Mini-Tutorials unterstützen Sie dabei, Software in ABAP effizienter zu entwickeln.
  • Praktische Anleitungen ermöglichen Ihnen schnelle Erfolge bei der Optimierung Ihrer Arbeit.
  • Bei der Anmeldung zu meinem Newsletter erhalten Sie das Buch „ABAP Tipps und Tricks“ als Willkommensgeschenk.
ABAP Tipps und Tricks

Jetzt anfordern!

* Pflichtfeld
 
Kein SPAM. Ich hasse Spam genau so wie du.

Quellen:
Karl-Heinz Kühnhauser, Thorsten Franz (2011): Discover ABAP, 3. Auflage, Bonn
SAP Hilfe – ABAP-Systemfelder

Falls Ihnen dieser Beitrag weitergeholfen hat, wäre es eine sehr nette Anerkennung meiner Arbeit wenn Sie z.B. Ihre Bücher über Amazon bestellen würden. Wenn Sie ein Produkt kaufen, erhalte ich dafür eine Provision. Für Sie ändert sich am Preis des Produktes gar nichts. Ich möchte mich an dieser Stelle jetzt schon für Ihre Unterstützung bedanken.

1 Kommentar
  1. Kibar
    Kibar sagte:

    Hallo Denis,

    danke für die Informationen und dein Wissen, ich bin neu im ABAP und SAP Umfeld. Mit deinem Know-How kann ich vieles sehr einfach nachvollziehen und es ist sehr praxisnah.

    Vielen herzlichen Dank

    Kibar Demir

    Antworten

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.