9.7 Codebeispiel zu MODIFY 

Als Nächstes nehmen wir uns die MODIFY-Anweisung vor. Listing 9.3 zeigt als Beispiel den Report Z_TEILNEHMERLISTE09_MODIFY.
1 *&---------------------------------------------*
2 *& Report Z_TEILNEHMERLISTE09_MODIFY *
3 *& *
4 *&---------------------------------------------*
5 *& *
6 *& *
7 *&---------------------------------------------*
8
9 REPORT z_teilnehmerliste09_modify.
10
11 * Korrekt: Workarea deklarieren
12 DATA: wa_zteilnehmer02 TYPE zteilnehmer02.
13
14 * Veraltet: Tabellenarbeitsbereich deklarieren
15 TABLES zteilnehmer02.
16
17 * Zeichenketten deklarieren
18 DATA: tnr TYPE zteilnehmer02-tnummer.
19
20 * Tabellenzeilen vor der Veränderung der Tabelle
21 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02
22 ORDER BY PRIMARY KEY.
23 WRITE: / wa_zteilnehmer02-tnummer,
24 wa_zteilnehmer02-tname,
25 wa_zteilnehmer02-tgeburtsdatum,
26 wa_zteilnehmer02-tgeschlecht,
27 wa_zteilnehmer02-tkurspreis,
28 wa_zteilnehmer02-twaehrung,
29 wa_zteilnehmer02-zzkfztyp,
30 wa_zteilnehmer02-zzkurstitel.
31 ENDSELECT.
32 tnr = wa_zteilnehmer02-tnummer.
33 SKIP.
34
35 * Neuen Datensatz anlegen aus Workarea
36 tnr = tnr + 1.
37 CLEAR wa_zteilnehmer02.
38 wa_zteilnehmer02-tnummer = tnr.
39 wa_zteilnehmer02-tname = 'Maier'.
40 wa_zteilnehmer02-tgeburtsdatum = '19980808'.
41 wa_zteilnehmer02-tgeschlecht = 'M'.
42 wa_zteilnehmer02-tkurspreis = '999'.
43 wa_zteilnehmer02-twaehrung = 'EUR'.
44 wa_zteilnehmer02-zzkfztyp = 'KOMBI'.
45 wa_zteilnehmer02-zzkurstitel = 'Netzwerktechnik'.
46 MODIFY zteilnehmer02 FROM wa_zteilnehmer02.
47 WRITE: / 'Modify aus Workarea
liefert sy-subrc', sy-subrc.
48
49 * Datensatz ändern aus Tabellenarbeitsbereich
50 tnr = tnr - 1.
51 zteilnehmer02-tnummer = tnr.
52 zteilnehmer02-tname = 'Schmidt'.
53 zteilnehmer02-tgeburtsdatum = '20000909'.
54 zteilnehmer02-tgeschlecht = 'M'.
55 zteilnehmer02-tkurspreis = '999'.
56 zteilnehmer02-twaehrung = 'USD'.
57 zteilnehmer02-zzkfztyp = 'KOMBI'.
58 zteilnehmer02-zzkurstitel = 'Netzwerktechnik'.
59 MODIFY zteilnehmer02.
60 WRITE: / 'Modify aus Tabellenarbeitsbereich liefert
sy-subrc', sy-subrc.
61
62 * Tabelleninhalt nach der Veränderung
63 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02
64 ORDER BY PRIMARY KEY.
65 WRITE: / wa_zteilnehmer02-tnummer,
66 wa_zteilnehmer02-tname,
67 wa_zteilnehmer02-tgeburtsdatum,
68 wa_zteilnehmer02-tgeschlecht,
69 wa_zteilnehmer02-tkurspreis,
70 wa_zteilnehmer02-twaehrung,
71 wa_zteilnehmer02-zzkfztyp,
72 wa_zteilnehmer02-zzkurstitel.
73 ENDSELECT.
Listing 9.3 Report Z_TEILNEHMERLISTE09_MODIFY
Anmerkungen zum Quellcode
Bis Zeile 34 wird der Report wird analog zum INSERT- und UPDATE-Beispiel aufgebaut.
Zeile 36
Als Erstes soll mit dem MODIFY-Kommando ein neuer Datensatz angelegt werden. Deshalb wird das Schlüsselfeld TEILNEHMERNUMMER hochgezählt.
Zeile 37 bis 45
Die Workarea wird initialisiert, und die Felder des Satzes werden gefüllt.
Zeile 46 und 47
Mit der MODIFY-Anweisung wird der Satz der Datenbanktabelle mit den entsprechenden Schlüsselfeldern gesucht und aus der Workarea heraus gefüllt. Da das Schlüsselfeld TEILNEHMERNUMMER gerade hochgezählt wurde, kann es auf der Datenbank keinen zugehörigen Satz mit diesem Schlüssel geben – folglich wird ein neuer Satz angelegt. Zur Kontrolle wird der Returncode des Kommandos in der Liste ausgegeben.
Zeile 50
Es soll die andere Wirkungsweise der MODIFY-Anweisung eintreten. Deshalb wird die Teilnehmernummer auf den Schlüssel eines bestehenden Satzes geändert.
Zeile 51 bis 58
Im Tabellenarbeitsbereich wird der zu ändernde Satz aufgebaut. Geändert wird der Feldinhalt für die Währungseinheit.
Zeile 59 und 60
Diesmal findet die MODIFY-Anweisung einen bestehenden Satz auf der Datenbank. Der Satz wird aktualisiert und der Returncode in die Liste geschrieben. Beide MODIFY-Anweisungen konnte das System erfolgreich durchführen; deshalb beträgt in beiden Fällen der Wert von SY-SUBRC 0.
Zeile 63 bis 73
Um den Inhalt der Tabelle vor und nach den MODIFY-Anweisungen darzustellen, erfolgt die Ausgabe der modifizierten Tabellenzeilen.
Ausgabe des Quellcodes
Satz 6 wurde durch das MODIFY-Kommando neu angelegt, weil noch kein Satz mit entsprechendem Schlüssel vorhanden war. Satz 5 wurde hingegen verändert: Die Währungseinheit ist nicht mehr Euro (EUR), sondern US-Dollar (USD, siehe auch Abbildung 9.3).
Abbildung 9.3 Listbild zum MODIFY-Beispiel