9.5 Codebeispiel zu INSERT 

Den Einsatz der verschiedenen Open-SQL-Anweisungen, die Sie in diesem Kapitel kennengelernt haben, zeigen wir Ihnen in den folgenden Abschnitten jeweils im Rahmen eines Beispiel-Reports. Listing 9.1 macht den Anfang mit einem Beispiel zur Anweisung INSERT.
1 *&---------------------------------------------*
2 *& Report Z_TEILNEHMERLISTE09_INSERT *
3 *& *
4 *&---------------------------------------------*
5 *& *
6 *& *
7 *&---------------------------------------------*
8
9 REPORT z_teilnehmerliste09_insert.
10
11 * Korrekt: Workarea deklarieren
12 DATA: wa_zteilnehmer02 TYPE zteilnehmer02.
13
14 * Veraltet: Tabellenarbeitsbereich deklarieren
15 TABLES zteilnehmer02.
16
17 * Zeichenkette 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 = 'Schmidt'.
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 = 'SAP-Finanzwesen'.
46 INSERT zteilnehmer02 FROM wa_zteilnehmer02.
47 WRITE: / ' Insert aus Workarea
liefert sy-subrc', sy-subrc.
48
49 * Veraltet: neuen Datensatz anlegen aus
Tabellenarbeitsbereich
50 tnr = tnr + 1.
51 zteilnehmer02-tnummer = tnr.
52 zteilnehmer02-tname = 'Schmidt'.
53 zteilnehmer02-tgeburtsdatum = '19990909'.
54 zteilnehmer02-tgeschlecht = 'W'.
55 zteilnehmer02-tkurspreis = '999'.
56 zteilnehmer02-twaehrung = 'EUR'.
57 zteilnehmer02-zzkfztyp = 'KOMBI'.
58 zteilnehmer02-zzkurstitel = 'SAP-Finanzwesen'.
59 INSERT zteilnehmer02.
60 WRITE: / ' Insert aus Tabellenarbeitsbereich liefert
sy-subrc', sy-subrc.
61
62 * Tabelleninhalt nach der Veränderung auflisten
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.1 Report Z_TEILNEHMERLISTE09_INSERT
Anmerkungen zum Quellcode
Schauen Sie sich die folgenden Zeilen aus Listing 9.1 genauer an:
Zeile 12
Zur logischen Trennung zwischen Tabelle und Workarea wird eine Workarea deklariert, die mit der Tabelle im ABAP Dictionary strukturgleich ist und sich auf diese als Typ bezieht.
Zeile 15
In der veralteten Schreibweise wird mit der TABLES-Anweisung ein Tabellenarbeitsbereich angelegt – ein Datenobjekt im Programm, das mit der Datenbanktabelle namens- und strukturgleich ist und implizit als Workarea für diese dient. Diese Mehrfachverwendung des Tabellennamens kann verwirrend sein, weshalb Sie in neuen Programmen statt der TABLES-Anweisung explizit definierte Workareas mit einem eigenen Namen verwenden sollten, damit jederzeit klar ist, wann die Workarea und wann tatsächlich die Tabelle bearbeitet wird. Wir führen sie in diesem Programm nur ausnahmsweise auf, um zu zeigen, wie man es heute nicht mehr macht (auch wenn Ihnen diese Schreibweise noch oft in alten Programmen begegnen wird).
Zeile 21 bis 31
Für den Vergleich des Tabelleninhalts vorher und nachher wird der alte Tabelleninhalt ausgegeben. Der Zusatz ORDER BY PRIMARY KEY bewirkt ein Verhalten, das ohnehin bei den meisten Datenbanken implizit auftritt, nämlich die Sortierung der Ergebnismenge nach dem Tabellenschlüssel. Lediglich bei der Datenbank SAP HANA wird die Ergebnismenge nur bei expliziter Angabe dieses Zusatzes nach dem Tabellenschlüssel sortiert.
Zeile 32
Das Feld TNR erhält die zuletzt gelesene, d. h. (dank unserer expliziten Vorgabe für die Sortierung) die höchste Teilnehmernummer. Diese Information ist wichtig, weil die Teilnehmernummer ein Schlüsselfeld ist.
Zeile 36
Die Teilnehmernummer wird um 1 erhöht. Der neue Satz soll lückenlos mit der nächsthöheren Teilnehmernummer eingefügt werden. Hier wird auch deutlich, warum es in Zeile 21 wichtig war, die Ergebnismenge nach dem Tabellenschlüssel zu sortieren: Der letzte Satz der Ergebnismenge soll auch der mit der höchsten Teilnehmernummer sein.
Zeile 37
In der Workarea steht noch der zuletzt gelesene Satz aus der Tabelle. Damit der neu anzulegende Satz mit Sicherheit nur aus den richtigen Daten besteht und kein alter Bestand übernommen wird, muss die Workarea vor dem erneuten Füllen initialisiert werden.
Zeile 38 bis 45
Die Workarea wird mit den neuen Satzinhalten gefüllt.
Zeile 46 und 47
Der neue Satz wird auf die Datenbanktabelle geschrieben; zur Sicherheit wird der Returncode des Kommandos mit Kommentar ausgegeben. In der Praxis wird der Returncode natürlich nicht in einer Liste ausgegeben, sondern im Programm abgefragt. Je nach Inhalt wird im positiven Fall die Verarbeitung fortgesetzt oder eine Fehlerbehandlung eingeleitet. Wie dies funktioniert, lernen Sie allerdings erst im folgenden Kapitel 10, »Programmablaufsteuerung und logische Ausdrücke« – deshalb muss hier die Listausgabe als Notnagel dienen.
Zeile 50
Es soll noch ein neuer Satz auf die Datenbank geschrieben werden. Deshalb wird die Teilnehmernummer hochgezählt.
Zeile 51 bis 58
Die Feldinhalte für den neuen Satz werden diesmal im Tabellenarbeitsbereich aufgebaut, nicht in der Workarea. Auch für den Tabellenarbeitsbereich gilt, dass er bei Mehrfachverwendung vor dem Neubeschreiben initialisiert werden muss. Im Beispiel wird der Arbeitsbereich nur einmal verwendet, deshalb kann man hier die CLEAR-Anweisung weglassen.
Zeile 59 und 60
Die Datenbanktabelle wird aus dem Tabellenarbeitsbereich heraus mit einem neuen Satz bestückt. Aus Sicherheitsgründen wird der Returncode des Kommandos mit in der Liste ausgegeben.
Zeile 63 bis 73
Zur Kontrolle werden alle Sätze der Datenbanktabelle nach der Datenbankänderung noch einmal gelesen und in die Liste geschrieben. Diesmal verwenden Sie auch in der SELECT-Anweisung die Workarea anstelle des Tabellenarbeitsbereiches. Wieder geben wir den Zusatz ORDER BY PRIMARY KEY an, um die Ergebnismengen leichter vergleichen zu können.
Ausgabe des Quellcodes
Die Datenbanktabelle hatte durch die bisherigen Arbeiten drei Datensätze. Nach den beiden INSERT-Anweisungen sind die Sätze 4 und 5 neu hinzugekommen (siehe Abbildung 9.1).
Abbildung 9.1 Listbild zum INSERT-Beispiel