290 likes | 515 Views
Datenbankzugriff und Modularisierungstechniken. Übung 8. Tabellenzeile mit READ lesen. READ TABLE itab INDEX idx READ TABLE itab WITH KEY comp1 = f1 .... Compn = fn. Beispiel. PARAMETERS: ps_name LIKE zkunden-name LOWER CASE, ps_vname LIKE zkunden-vorname LOWER CASE.
E N D
Tabellenzeile mit READ lesen READ TABLE itab INDEX idx READ TABLE itab WITH KEY comp1 = f1 .... Compn = fn
Beispiel PARAMETERS: ps_name LIKE zkunden-name LOWER CASE, ps_vname LIKE zkunden-vorname LOWER CASE. DATA: it_kunden LIKE TABLE OF zkunden, wa_kunden LIKE zkunden. START-OF-SELECTION. SELECT * FROM zkunden INTO TABLE it_kunden. READ TABLE it_kunden INTO wa_kunden WITH KEY name = ps_name vorname = ps_vname. IF sy-subrc <> 0. WRITE ' keine Treffer'. ENDIF. WRITE:/ wa_kunden-wohnort .
MODIFY <itab> FROM <wa> INDEX <idx>. MODIFY TABLE <itab> FROM <itab>. MODIFY <itab> FROM <wa> TRANSPORTING <f1> <f 2> ... WHERE <cond>. Tabellenzeilen mit MODIFY ändern
Beispiel DATA: BEGIN OF line,col1 TYPE i, col2 TYPE i, END OF line. DATA itab LIKE TABLE OF line . DO 4 TIMES. line-col1 = sy-index. line-col2 = sy-index * 2. APPEND line TO itab. ENDDO. line-col1 = 2. line-col2 = 100. MODIFY itab FROM line TRANSPORTING col2 WHERE ( col1 = 3 ) . LOOP AT itab INTO line. WRITE: / line-col1, line-col2. ENDLOOP.
Weist Werte zwischen Strukturen komponentenweise zu. Syntax: MOVE-CORRESPONDING <struc1> TO <struc2>. Der Inhalt der Komponenten der Struktur <struc1> wird den namensgleichen Komponenten der Struktur struc2> zugewiesen MOVE-CORRESPONDING
... FROM <dbtab1> [AS <alias1>] INNER JOIN <dbtab2> [AS <alias2>] ON <alias1~key1>|<dbtab1~key1> = <alias1~key2>|<dbtab1~key2> INNER JOIN, ALIAS
INSERT INTO <dbtable> VALUES <wa>. INSERT <dbtab> FROM <wa>. INSERT <dbtab> FROM TABLE <itab> [ACCEPTING DUPLICATE KEYS]. Es werden eine Zeile aus dem Arbeitsbereich <wa> bzw. mehrere Zeilen aus der internen Tabelle <itab> in die Datenbanktabelle <dbtab> eingefügt. Der Zusatz ACCEPTING DUPLICATE KEYS verhindert einen Laufzeitfehler bei doppelten Primärschlüsseln und verwirft doppelte Einträge lediglich Datensätze in Datenbanktabelle einfügen
PARAMETERS: ps_name LIKE zkunden-name LOWER CASE, ps_vname LIKE zkunden-vorname LOWER CASE, ps_wort LIKE zkunden-wohnort LOWER CASE, ps_kdnr LIKE zkunden-kundennr LOWER CASE. DATA: wa_kunden LIKE zkunden, START-OF-SELECTION. wa_kunden-kundennr = ps_kdnr. wa_kunden-name = ps_name. wa_kunden-vorname = ps_vname. wa_kunden-wohnort = ps_wort. INSERT INTO zkunden000 VALUES wa_kunden. IF sy-subrc NE 0. ROLLBACK WORK. WRITE: / 'Fehler beim INSERT in die Tabelle ZKUNDEN000!'. EXIT. ENDIF. WRITE: / 'Neuer Kunde mit Nr:', wa_kunden-kundennr. COMMIT WORK. Beispiel
Datensätze in Datenbanktabelle ändern UPDATE <dbtab> SET <si> = <f> [WHERE <cond>]. Der Zusatz WHERE bestimmt die zu ändernden Zeilen. Ohne den Zusatz WHERE werden alle Zeilen geändert. UPDATE <dbtab> FROM <wa>. UPDATE <dbtab> FROM TABLE <itab>. Es wird die Zeile mit dem Inhalt von <wa> überschrieben, die den gleichen Primärschlüssel hat, wie der Arbeitsbereich <wa>, bzw. es werden alle Zeilen mit einer Zeile der internen Tabelle <itab> überschrieben, die den gleichen Primärschlüssel wie diese Zeilen haben. Der Arbeitsbereich <wa> bzw. die Zeilen von <itab> müssen mindestens die gleiche Länge und die gleiche Ausrichtung wie die Zeilen der Datenbanktabelle haben.
PARAMETERS: ps_name LIKE zkunden-name LOWER CASE, ps_vname LIKE zkunden-vorname LOWER CASE, ps_wort LIKE zkunden-wohnort LOWER CASE. START-OF-SELECTION. UPDATE zkunden000 set wohnort = ps_wort where name = ps_name and vorname = ps_vname. IF sy-subrc NE 0. ROLLBACK WORK. WRITE: / 'Fehler beim UPDATE der Tabelle ZKUNDEN000!'. EXIT. ENDIF. COMMIT WORK. SKIP. WRITE: 'Wohnort des kunde:', ps_name, 'ist geändert worden'. Beispiel
DELETE FROM <dbtab> WHERE <cond>. Alle Zeilen der Datenbanktabelle <dbtab>, die den Bedingungen der WHERE-Klausel genügen, werden gelöscht. Syntax DELETE <dbtab> FROM <wa>. DELETE <dbtab> FROM TABLE <itab>. Es wird die Zeile gelöscht, die den gleichen Primärschlüssel hat, wie der Arbeitsbereich <wa>, bzw. es werden alle Zeilen aus der Datenbanktabelle gelöscht, die den gleichen Primärschlüssel haben, wie eine der Zeilen der internen Tabelle <itab>. Der Arbeitsbereich <wa> bzw. die Zeilen von <itab> müssen mindestens die gleiche Länge und die gleiche Ausrichtung wie der Primärschlüssel der Datenbanktabelle haben. Datensätze in Datenbanktabelle löschen
Die Modularisierung dient ; der Les- und Pflegbarkeit von ABAP-Programmen, der Vermeidung von Redundanzen, der Wiederverwendbarkeit von Funktionalität und der Kapselung von Daten Modularisierungstechniken
Verarbeitungsblöcke, die durch das ABAP-Laufzeitsystem aufgerufen werden: Ereignisblöcke Dialogmodule Verarbeitungsblöcke, die aus ABAP-Programmen aufgerufen werden: Unterprogramme Funktionsbausteine Methoden Die aus ABAP-Programmen aufrufbaren Verarbeitungsblöcke heißen Prozeduren Modularisierungstechniken
Zusätzlich zur Modularisierung in Verarbeitungsblöcken bietet ABAP die Möglichkeit der Quelltext-Modularisierung, die es erlaubt ABAP-Anweisungen entweder lokal in Makros oder global in Include-Programmen zusammenzufassen. Quelltext-Module
Unterprogramme Unterprogramme dienen hauptsächlich der lokalen Modularisierung. Unterprogramme enthalten mehrfach verwendete Funktionalität innerhalb eines Programms zusammen und führen mehrfach benötigte Aufgaben aus. Funktionsbausteine Funktionsbausteine dienen ausschließlich der globalen Modularisierung, also dem Aufruf aus anderen Programmen. Funktionsbausteine enthalten Funktionalität, die systemweit von verschiedenen Programmen verwendet wird. Funktionsbausteine können nur in Funktionsgruppen definiert, aber aus allen Programmen aufgerufen werden. Methoden Methoden enthalten die Funktionalität bzw. das Verhalten von Klassen und deren Instanzen in ABAP Objects, der objektorientierten Erweiterung von ABAP. Prozeduren
Unterprogramme sind Prozeduren, die in jedem ABAP- Programmen definiert und aus jedem ABAP-Programm aufgerufen werden können. Unterprogramme dienen hauptsächlich dem internen Aufruf, also um lokal häufig benutzte Programmteile oder Algorithmen nur einmal schreiben zu müssen. Der globalen Wiederverwendung von Funktionalität dienen Funktionsbausteine. Unterprogramme
Ein Unterprogramm ist ein Verarbeitungsblock, der zwischen den Anweisungen FORM und ENDFORM eingeschlossen ist: FORM <subr> [USING ... [VALUE(]<pi>[)] [TYPE <t>|LIKE <f>].. ] [CHANGING... [VALUE(]<pi>[)] [TYPE <t>|LIKE <f>]... ]. ... ENDFORM. <subr> ist der Name des Unterprogramms. Die optionalen Zusätze USING und CHANGING definieren die Parameterschnittstelle. Wie alle Verarbeitungsblöcke können Unterprogramme nicht geschachtelt werden. Es empfiehlt sich insbesondere bei ausführbaren Programmen vom Typ 1 die Definition aller Unterprogramme am Ende des Programmtextes anzuordnen, damit nicht versehentlich unausführbare Anweisungen dadurch entstehen, daß ein Unterprogramm einen Ereignisblock an der falschen Stelle abschließt. Definition von Unterprogrammen
Parameter mit Referenzübergabe Diese Parameter werden ohne die Angabe VALUE hinter USING oder CHANGING aufgeführt: FORM <subr> USING ... <pi> [TYPE <t>|LIKE <f>] ... CHANGING ... <pi> [TYPE <t>|LIKE <f>] ... Eingabeparameter mit Wertübergabe Diese Parameter werden mit der Angabe VALUE hinter USING aufgeführt: FORM <subr> USING ... VALUE(<pi>) [TYPE <t>|LIKE <f>] ... Ausgabeparameter mit Wertübergabe Diese Parameter werden mit der Angabe VALUE hinter CHANGING aufgeführt: FORM <subr> CHANGING ... VALUE(<pi>) [TYPE <t>|LIKE <f>] ... Die Parameterschnittstelle
Unterprogramme werden über PERFORM... [USING ... <pi>... ] [CHANGING... <pi>... ]. PERFORM <subr>(<prog>) [USING ... <pi>... ] [CHANGING... <pi>... ] [IF FOUND]. Der Programmname <prog> wird statisch angegeben. Durch Die Verwendung der Option IF FOUND läßt sich ein Laufzeitfehler verhindern, wenn das Programm <prog> kein Unterprogramm <sub> enthält. Dann ignoriert das System die PERFORM-Anweisung Aufruf von Unterprogrammen
Funktionsbausteine sind Prozeduren, die nur innerhalb spezieller ABAP-Programme, den sogenannten Funktionsgruppen vom Typ F, definiert, aber aus allen ABAP-Programmen aufgerufen werden können. Funktionsgruppen sind Behälter für thematisch zusammengehörige Funktionsbausteine. Das Anlegen von Funktionsgruppen und von Funktionsbausteinen erfolgt mit dem Werkzeug Function Builder der ABAP Workbench Funktionsbausteine
Funktionsgruppen sind Behälter bzw. Rahmenprogramme für Funktionsbausteine. Funktionsgruppen können nicht ausgeführt werden. Beim Aufruf eines Funktionsbausteins wird die gesamte Funktionsgruppe, in der sich der Funktionsbaustein befindet, in den internen Modus des aufrufenden Programms geladen, falls sie sich noch nicht dort befindet . Funktionsgruppen
CALL FUNCTION <baustein> [EXPORTING f1 = a 1.... f n = a n] [IMPORTING f1 = a 1.... f n = a n] [CHANGING f1 = a 1.... f n = a n] [TABLES f1 = a 1.... f n = a n] [EXCEPTIONS e1 = r 1.... e n = r n [OTHERS = ro]]. Funktionsbausteinaufruf in ABAP
Übung1 Erstellen Sie ZDEPOTmaxnn, der für jede Wertpapierkennnummer WKN das Depot mit der größten Anzahl dieser Aktien ermittelt und ausgibt (s. Abbildung)
Übung2 • Erstellen Sie mit dem Report Zkundenwpapiernn eine Liste der Depotposten von Kunden, deren Name und Vorname als Selektionsparameter eingelesen werden • (s. Abbildung). • Auf die Liste sollen folgende Felder erscheinen: • Kundenname • Kundenvorname • Wertpapiernummer • Anzahl der Wertpapiere
Programmieren Sie Reports: zdeletenn, zinsertnn Und zupdatenn zum löschen, einfügen und ändern von Kundendaten. Wenden Sie Selektionsbilder an um diese Aufgabe zu erfüllen. Beim Ändern der Kundendaten sollen nur Wohnort des Kunden geändert werden. Ihre Tabelle Zkunden_nn soll von den Reports genutzt werden. Übung3
Übung 4 FORM-Schnittstelle Erstellen Sie eine Report ZFORMINTABnn, der für eine vom Anwender einzugebende Depotnummer (s. Abbildung), die Wertpapierkennnummer und die Anzahl der darin enthaltenen Wertpapiere über ein FORM-Unterprogramm ausgibt.
Übung 5 Funktionsbaustein Erstellen Sie eine Funktionsgruppe ZUEBUNGnn mit einem darin enthaltenen Funktionsbaustein ZKURSnn, der von 3 Aktienkursen den Durchschnittkurs berechnet. Der einzugebende Kurs soll immer grösser als Null sein.