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