CT-Professional_100 + Help …
Das interaktive Lernsystem für ABAP® verbindet Theorie und Praxis durch eine Echtzeitkopplung an das SAP®-System oder dem ‘CT-Debug_Simulator’.
Kurs 3: “Weitere Befehle für effiziente Programmierung”
Der Fortsetzungskurs 3 zeigt Ihnen weitere Möglichkeiten, wie Sie z.B. durch die umfangreiche Befehlsgruppe “SELECT …” gezielt mit der Datenbank des SAP®-R/3®-Systems zusammenarbeiten können. Auch das Verständnis für die systeminterne Darstellung von Variablen wird für verschiedene Datentypen erweitert.
Gemeinsam mit den Kursen 1 – 3 ist bereits ein Kenntnisstand verfügbar, mit dem Sie auch effiziente Reports schreiben können.
Wieviel Lerninformationen stehen im Kurs 3 zur Verfügung ?
Der Kurs 3 besteht aus ca. 2900 Textabschnitten mit insgesamt ca. 12000 Zeilen, insgesamt sind mehr als 140 Formal- und Beispiel-Reports enthalten. Die Reportbeispiele werden durch ca. 460 Overlay-Zeichnungen innerhalb der Syntaxerläuterungen und während der Debugging-Session zusätzlich illustriert. Die Einzelthemen des Info-Trees sind nachfolgend als Fließtext aufgelistet. Überwiegend sind dies die Überschriften zu den einzelnen Textelementen, sie geben einen Überblick über den Umfang und die Detailstruktur der Wissensbereiche.
Die Aufzählung der einzelnen Tree-Infos soll einen Eindruck über den Umfang und den Themenkreis der jeweiligen Kurse vermitteln. Natürlich sind diese Informationen im Kurs durch den INFO-Tree sauber geordnet. Die Bearbeitungsreihenfolge der Einzelthemen können Sie bestimmen. Sie entscheiden, ob Sie Reihenfolge anhand eines von uns vorgeschlagenen
- “roten Faden oder learning path” vornehmen oder
- in einen anderen Lernmodus verzweigen oder
- im Direktzugriff einzelne Kursbereiche aufrufen oder
- Textbausteine anzeigen lassen oder
- auf Reportbeispiele zugreifen oder
- den CT-DEBUG_Simulator einsetzen.
Eine detaillierte Aufzählung des Kursinhalts Wir haben die wesentlichen Inhalte des Info-Trees je Kursus nachfolgend als Fließtext angelistet, überwiegend sind dies die Überschriften zu den einzelnen Textelementen. Bitte beachten Sie den Umfang des jeweiligen Kurses (… zeigen Sie uns etwas Vergleichbares).
Die Aufzählung der einzelnen Tree-Infos soll einen Eindruck über den Umfang und den Themenkreis der jeweiligen Kurse vermitteln. Natürlich sind diese Informationen im Kurs durch den INFO-Tree hierarchisch geordnet.
Fließtext:
IF v1 strOp – die Stringoperatoren (strOp) . Die Stringoperatoren (als Überblick) . CO (v1 contains only) . CN (v1 contains not only) . CA (v1 contains any) . NA (v1 contains not any) . CS (v1 contains string) . NS (v1 contains not string) . CP (v1 contains pattern) . NP (v1 contains not pattern) . IF strOp befehle1 ELSE befehle2 ENDIF. (Syntax) . strOp (Stringoperator) . Umfang der zugelassenen Stringoperatoren . CO (contains only) . Ein Beispiel: . CN (contains not only) . Ein Beispiel: . CA (contains any) . Ein Beispiel: . NA (contains not any) . Ein Beispiel: . CS (contains string) . Ein Beispiel: . NS (contains not string) . Ein Beispiel: . CP (contains pattern) . Die Maskendarstellung . Ein Beispiel: . Ein Beispiel: . NP (contains not pattern) . Ein Beispiel: . Ein Beispiel: . Zusätzliche Verknüpfung durch boolesche . Boolesche Operatoren . Ein Beispiel: . Klammern . Ein Beispiel: . Zusätzliche logische Operatoren . Kleiner LT, < . Gleich EQ, = . Größer GT, > . Kleiner oder gleich LE, <=, =< . Ungleich NE, <>, >< . Größer oder gleich GE, >=, => . Weitere IF-Befehlsarten . Logische Vergleiche von Operanden . Vergleich vom Bitmustern und Bit-Variablen . Vergleich von Selektionskriterien . Beschreibung der Funktion von “IF v1 strOp v2” . Stringausdruck prüfen und Anweisung ausführen . Als Operanden nur C- und N-Felder verwenden . Ergebnis der Bedingung ermitteln . Ausführung der TRUE- oder FALSE-Befehle . Das Systemfeld SY-FDPOS . CO (contains only) . Beispiel-CO . Das Systemfeld SY-FDPOS . Ergebnis = TRUE . Ergebnis = FALSE . Kleiner TIP . Mini-TIP . CN (contains not only) . Beispiel-CN . Das Systemfeld SY-FDPOS . Ergebnis = TRUE . Ergebnis = FALSE . Kleiner TIP . CA (contains any) . Beispiel-CA . Das Systemfeld SY-FDPOS . Ergebnis = TRUE . Ergebnis = FALSE . Kleiner TIP . NA (contains not any) . Beispiel-NA . Das Systemfeld SY-FDPOS . Ergebnis = TRUE . Ergebnis = FALSE . CS (contains string) . Beispiel-CS . Groß-/Kleinschreibung wird nicht berücksichtigt . Das Systemfeld SY-FDPOS . Ergebnis = TRUE . Ergebnis = FALSE . Kleiner TIP . NS (contains not string) . Beispiel-NS . Groß-/Kleinschreibung wird nicht berücksichtigt . Rechtsbündige Leerzeichen sind unbedeutend . Das Systemfeld SY-FDPOS . Ergebnis = TRUE . Ergebnis = FALSE . CP (contains pattern) . Beispiel-CP . Aufbau der Maske im 2. Operanden . Übliche Zeichen aus den bekannten Stringvergleichen . Das Sonderzeichen + . Das Sonderzeichen * (Stern) . Das Sonderzeichen # (“Lattenzaun”) . Beispiel-Sonderzeichen “#”. . Die Prüfungsreihenfolge . Ergebnis der Bedingungsprüfung . Ergebnis = TRUE . Ergebnis = FALSE . Groß-/Kleinschreibung wird nicht berücksichtigt . Leerzeichen bei unterschiedlicher Operandenlänge . Ein Beispiel . Das Systemfeld SY-FDPOS . Ergebnis = TRUE . Ergebnis = FALSE . NP (contains not pattern) . Beispiel-NP (contains not pattern) . Anwendungsmöglichkeiten in Report-Beispielen . Allgemeine Informationen . Report-Beispiele (allgemeiner Teil) . Beispiel-Report-Dateiname Eine IF-Abfrage als Vorwand . SY-FDPOS soll verwendet werden . Der Dateiname wird ergänzt . Eine Datei auf BS-Ebene bearbeiten (nur DEMO) . Vor dem Entsternen Berechtigung prüfen . Beispiel-Report-Parametereingaben Der CN-Operator prüft den Zeichenvorrat . Das ungültige Zeichen als Offset in SY-FDPOS . Die Bestimmung des ungültigen Zeichens . Weitere notwendige Prüfungen . Beispiel-Report-Teilen-String Der Stringoperator “CA” . SY-FDPOS . Verschieben des Teilstückes . Welche kleinen Fehler sind in dem Report enthalten? . Das Trennzeichen als 1. Zeichen im String . Der letzte Teilstring . Beispiel-Report-Ersetzen Der Stringoperator “CA” . SY-FDPOS . Welche kleinen Fehler sind in dem Report enthalten? . Das Leerzeichen als Ersetzungszeichen . Gibt es noch weitere Fehler? . Beispiel-Report-Suchen Ausprobieren . Versuch-1 . Versuch-2 . Versuch-3 . Beispiel-Report-Suchen Beispiel-Report-CO INSERT INTO etab VALUE wb – der Workbereich (wb) . INSERT INTO etab . (etab_var) VALUES ar. . Keine doppelten Schlüssel . VALUES . ar (Arbeitsbereich “etab”) . Keine Veränderung des Arbeitsbereiches durch INSERT . INSERT INTO etab . (etab_var) VALUES ar . Die Tabellen des aktuellen Mandanten . Einige “INSERT INTO etab …” . Keine Benutzung des alternativen Arbeitsbereiches . Einzelbefehl oder innerhalb von Schleifen . Alle Schlüsselfelder sind zu verwenden . Einsatz in Schleifenbefehlen . Der COMMIT-WORK in SELECT-Schleifen . INSERT ohne WHERE-Bedingung . Der Tabellenname als Variableninhalt (ab 3.0) . Anwendungsmöglichkeit in einem Report-Beispiel . Allgemeine Information . Prüfung, ob Insert-Daten bereits vorhanden sind . INSERT von Testdaten . Aufbau der Tabellendaten . INSERT der Testdaten aus IT100 I-Felder – MOVE und Integerfelder (4 Bytes) . Die Übertragung von I-Feldern . Die Syntax- und Funktionsbeschreibung von “MOVE …” . Die C-Felder im “MOVE …” (Charakter, Zeichenfelder) . Die N-Felder im “MOVE …” (Numerische Zeichen) . Die I-Felder im “MOVE …” (Integer, Ganzzahlen) . Die P-Felder im “MOVE …” (Gepackter Feldinhalt) . Die F-Felder im “MOVE …” (Floating Point, Fließkomma) . Die D-Felder im “MOVE …” (Datum, JHJJMMTT) . Die T-Felder im “MOVE …” (Uhrzeit, HHMMSS) . Die X-Felder im “MOVE …” (Hexadezimalfelder) . Die Übertragung von I-Feldern (Einzeldarstellung) . Der Hexa-Inhalt eines I-Feldes muß für … . Die vergleichbare Felddarstellung: “BIG ENDIAN” . Die Darstellungsform eines I-Feldes . Die Übertragung eines I-Feldes in ein C-Feld . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Das Vorzeichen aus dem I-Feld wird berücksichtigt . Eine negative Zahl wird aus dem I-Feld übertragen . Die Druckaufbereitung eines I-Feldes . Wie kommt der Stern “*” in ein C-Feld? . Die Übertragung eines I-Feldes in ein N-Feld . Die Zusammenfassung . Ein N-Feld kann kein negatives Vorzeichen . Es wird abgeschnitten . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Das Vorzeichen wird nicht weitergegeben . Negative Werte werden zu positiven Zahlen ? . Die höchstwertige Ziffer verschwindet . Die Druckaufbereitung von I- und N-Feld . Die Übertragung eines I-Feldes in ein anderes I-Feld . Keine Probleme (Vorzeichen, Feldgröße, . Eine negative Zahl wird übertragen, alles o.k. . Die Übertragung eines I-Feldes in ein P-Feld . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Eine positive Zahl wird in ein P-Feld kopiert . Eine negative Zahl wird in ein P-Feld übertragen . Die Druckaufbereitung aus beiden Feldern ist . Die Übertragung eines I-Feldes in ein D-Feld . Die Konvertierung in “Anzahl Tage …” . Eine negative Zahl wird nicht übertragen . Die Übertragung eines I-Feldes in ein T-Feld . Die Anzahl der Sekunden wird übertragen . Eine zu große Zahl wird übertragen . Gibt es “negative Sekunden”? . Die Übertragung eines I-Feldes in ein X-Feld . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Eine positive Zahl wird als HEXA-Wert übertragen . Die Übertragung einer negativen Zahl in ein X-Feld . Wie sieht eigentlich der Wert “-1” in beiden … . Der Überlauf in einem X-Feld . Die Übertragung eines I-Feldes in ein F-Feld . Die Darstellung der Zahl “1” in I- und F-Feldern . Eine positive Zahl wird in ein F-Feld kopiert . Wie wird der negative Wert “1” in einem F-Feld . P-Felder – MOVE und gepackte Felder . MOVE; P-Feld; Konvertierung in andere Datentypen; . Die Syntax- und Funktionsbeschreibung von “MOVE …” . Die Übertragung von P-Feldern (Einzeldarstellung) . Der Feldinhalt eines Datenfeldes vom Typ ‘P’ wird übertragen . Allgemein . Dezimalkommastellen . Die Übertragung eines P-Feldes in ein C-Feld . Die Zusammenfassung . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Wenn das P-Feld kleiner ist als das C-Feld . MOVE P(003) TO C(006). . Die Übertragung einer negativen Zahl . MOVE P(003) TO C(006). . Die Zahl ist zu groß für das Empfangsfeld . MOVE P(007) TO C(006). . Auf den Stern im Empfangsfeld achten . MOVE P(007) TO C(006). . Das Auffüllen der nicht benötigten Stellen . MOVE P(002) TO C(006). . Die Übertragung eines P-Feldes in ein N-Feld . Die Zusammenfassung . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Eine allgemeine Übertragung von “P nach N” . MOVE P(003) TO N(005). . Eine negative Zahl wird in ein N-Feld übernommen . MOVE P(003) TO N(005). . Ein N-Feld ist zu klein . MOVE P(008) TO N(006). . Die Übertragung eines P-Feldes in ein I-Feld . Die Darstellungsform eines I-Feldes . Das Empfangsfeld ist zu groß . Eine Datenübertragung ohne Probleme . MOVE P(008) TO I(004). . Eine negative Zahl wird in ein I-Feld übertragen . MOVE P(005) TO I(004). . Die Interpretation der Speicherbereiche . Hauptspeicherinhalt eines P-Feldes . Hauptspeicherinhalt eines I-Feldes . Die Konvertierung einer Dezimalzahl . MOVE P(007) TO I(004). . Die Übertragung eines P-Feldes in ein anderes P-Feld . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Eine normale Datenübertragung von “P zu P” . MOVE P(005) TO P(005). . Eine negative Zahl wird übertragen . MOVE P(005) TO P(005). . Das Empfangsfeld ist größer als das Sendefeld . MOVE P(005) TO P(007). . Die Übertragung eines P-Feldes in ein D-Feld . Die Zusammenfassung . Die Konvertierung einer Zahl in ein Datum . MOVE P(001) TO D(008). . Konvertiert wird auch ein Datum in ferner Zukunft . MOVE P(007) TO D(008). . Ein negatives Datum wird nicht akzeptiert . MOVE P(003) TO D(008). . Auch eine zu große Zahl wird übertragen . MOVE P(008) TO D(008). . Die Übertragung eines P-Feldes in ein T-Feld . Die Konvertierung für ein T-Feld . MOVE P(003) TO T(006). . Eine zu große Zahl wird übertragen . MOVE P(007) TO T(006). . Auch eine negative Zahl wird übertragen . MOVE P(003) TO T(006). . Die Übertragung eines P-Feldes in ein X-Feld . Die Zusammenfassung . Eine Zahl wird aus einem P-Feld in ein X-Feld . MOVE P(005) TO X(003). . Das Empfangsfeld vom Typ “X” ist zu klein . MOVE P(008) TO X(002). . Es werden nur 4 Bytes in das Empfangsfeld . MOVE P(002) TO X(005). . Die Übertragung eines P-Feldes in ein F-Feld . Der Normalfall . MOVE P(007) TO F(008). . Eine negative Zahl wird übertragen . MOVE P(007) TO F(008). . F-Felder – MOVE und Floating Point Die allgemeine Funktionsbeschreibung von “MOVE v1 TO v2” . Die Übertragung von F-Feldern . Die Darstellung der Feldinhalte in … . Das Ergebnis der Konvertierungsroutinen . Feldtypen; C; N; I; P; F; D; T; X; . Die Gesamtdarstellung . Die Übertragung von F-Feldern (Einzeldarstellung) . Zugelassene Zeichen in einem F-Feld . Die Darstellungsform von Gleitkommazahlen . Darstellungsbereich und Feldgröße . Rundungsprobleme . Die Übertragung eines F-Feldes in ein C-Feld . Die Zusammenfassung . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Eine Gleitkommazahl wird in ein C-Feld übertragen . MOVE F(008) TO C(007). . Die Gleitkommadarstellung wird von dem C-Feld . MOVE F(008) TO C(015). . In das C-Feld wird rechtsbündig übertragen . MOVE F(008) TO C(048). . Die Übertragung eines F-Feldes in ein N-Feld . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Die stellengerechte Umrechnung in eine Dezimalzahl . MOVE F(008) TO N(006). . Das Vorzeichen kann nicht in das N-Feld übernommen . MOVE F(008) TO N(006). . Das Auffüllen der nicht benötigten Stellen . MOVE F(008) TO N(008). . Das Empfangsfeld vom Typ N ist zu klein . MOVE F(008) TO N(003). . Die Übertragung eines F-Feldes in ein I-Feld . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Die Darstellungsform eines I-Feldes . Ein Beispiel . Die Konvertierung einer Gleitkommazahl . MOVE F(008) TO I(004). . Eine negative Mantisse wird berücksichtigt . MOVE F(008) TO I(004). . Die Übertragung eines F-Feldes in ein P-Feld . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Der Feldinhalt eines F-Feldes wird . MOVE F(008) TO P(008). . Eine negative Gleitkommazahl wird in ein P-Feld . MOVE F(008) TO P(008). . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Keine Einzelbeispiele . Die Übertragung eines F-Feldes in ein T-Feld . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Die übliche Konvertierung in eine Zeitpunktangabe . MOVE F(008) TO T(006). . Eine ungültige Uhrzeit wird ermittelt . MOVE F(008) TO T(006). . Die Übertragung eines F-Feldes in ein X-Feld . Das Empfangsfeld ist zu klein . Das Empfangsfeld ist zu groß . Die Konvertierung einer Gleitkommazahl in ein . MOVE F(008) TO X(003). . Eine negative Gleitkommazahl wird in ein X-Feld . MOVE F(008) TO X(003). . Das Empfangsfeld ist zu klein für die zu . MOVE F(008) TO X(002). . Die Übertragung eines F-Feldes in ein anderes F-Feld . Die Abbildung in beiden Variablen ist identisch . MOVE F(008) TO F(008). . Die SELECT-Klausel – Teil 1 . Die einzelnen Bestandteile des SELECT-Befehls . SELECT-Klausel . INTO-Klausel . FROM-Klausel . WHERE-Klausel . GROUP-Klausel . ORDER-Klausel . Aufzählung der vorgestellten SELECT-Klauseln . Der Stern ( * ) in der SELECT-Klausel: “SELECT * FROM etab … ENDSELECT.” . “SELECT * FROM etab” als Schleifenfunktion . “SELECT * FROM etab … ENDSELECT.” . SELECT * . FROM etab. . Die Schachtelung von SELECT-Befehlen ist erlaubt . “SELECT SINGLE * …” als Einzelbefehl . Der Workbereich . Der Primärschlüssel im SELECT-Befehl . Alle Felder (Spalten) der Tabellenzeile . Der Returncode SY-SUBRC . Das Fehlen von “ENDSELECT” . Die Angabe von Teilschlüsseln . Den Returncode SY-SUBRC auswerten . “SELECT SINGLE FOR UPDATE * … als Einzelbefehl . Der Returncode SY-SUBRC . Keine Änderung am Originaleintrag . Ein eindeutiger Schlüsselbegriff ist erforderlich . Der Returncode SY-SUBRC . Verschiedene Arten von Datensatz-Sperren . Direktes Sperren durch die Datenbank . Die logische Sperrung von Datensätzen . Die Aufhebung der Datenbanksperre . Die Dauer der Datenbanksperre . Deadlock bei gesperrten Datensätzen . Datensätze sperren und Bearbeiten . Welche SELECT-Befehle bewirken die Sperrung eines Satzes? . SELECT SINGLE FOR DELETE … . SELECT SINGLE FOR INSERT … . SELECT SINGLE FOR MODIFY … . SELECT SINGLE FOR UPDATE … . Gesperrten Satz bearbeiten . Gesperrten Satz von anderem USER nochmals sperren? . Einen gesperrten Satz von einem anderen USER ändern ? . Einen gesperrten Satz durch einen anderen Report lesen . “SELECT DISTINCT * … als Schleifenbefehl . Sinnvolle Anwendungsbereiche . SELECT {SINGLE {FOR UPDATE} . DISTINCT} tf1 tfn … ENDSELECT. . SELECT {SINGLE {FOR UPDATE} . DISTINCT} tf1 tfn … ENDSELECT . SELECT SINGLE tf1 tfn FROM etab … WHERE bedingung … . Der Arbeitsbereich … . Die INTO-Klausel . Die WHERE-Bedingung . Die Vollständigkeit der … . Einzelfeldangabe erfordert “INTO-Klausel” . Keine Tabellenangabe in INTO-Klausel . Der gesonderte Workbereich ITAB . Einzelfelder in der INTO-Klausel . WRITE-Angabe . Der SELECT-Befehl und die Einzelfeldangaben . WHERE-Bedingung . INTO-Klausel . Feldauswahl für Workbereich . SELECT SINGLE FOR UPDATE tf1 tfn FROM etab … WHERE bedingung … . Der gesperrte Tabellensatz . SELECT DISTINCT tf1 tf2 FROM etab … WHERE bedingung … ENDSELECT. . “SELECT DISTINCT …” als Einzelbefehl . Die Anweisung “TABLES” . Der Workbereich WFIELD . “SELECT DISTINCT …” . “… INTO TABLE WFIELD ” . “SORT …” . “LOOP AT WFIELD:” . “SELECT DISTINCT …” als Schleifenbefehl . Die Verwendung einzelner Tabellenfelder (tf1 tfn …) (ab 3.0) . Reduzierung der Datenbewegungen, Verbesserung der Ressourcennutzung . “SELECT ZMSGNR AS MESS_NR …” . “SELECT .. INTO CORRESPONDING FIELDS OF TABLE ITAB …” . “SELECT .. WHERE ZSPRSL ….” . “LOOP AT ITAB” . “SELECT … tf1 AS af1 ….” als Schleifenbefehl . “SELECT ZMSGNR AS MESS_NR …” . “… INTO (ITAB-MESS_NR …)” Die SELECT-Klausel – Teil 2 . Die interne Tabellenbearbeitung (grundsätzliche … . Felder der SELECT- und INTO-Klausel . Die INTO-Klausel . Die WHERE-Klausel . Die GROUP-Klausel . SELECT … COUNT( * ) MAX( tf1 ) MIN( tf1 ) … . “INTO TABLE itab …” . Die SELECT-Klausel . Die From-Klausel . Die INTO-Klausel . Die Ergebnisliste . “SELECT … COUNT( DISTINCT tf2 ) MIN( tf2 ) MAX( tf2 ) …” . Die GROUP-Klausel . “SELECT … SUM( tf1 ) MAX( tf1 ) MIN( tf1 ) … ” . “SELECT … AVG( tf1 ) MAX( tf1 ) MIN( tf1 ) … ” . SELECT {SINGLE {FOR UPDATE} . DISTINCT} (itab) Allgemeine Informationen zu der dynamischen Tabellenfeldauswahl . Statische Feldauswahl . Dynamische Feldauswahl . Die Anwendungshäufigkeit von “SELECT (itab) …” . “SELECT {SINGLE {FOR UPDATE} . DISTINCT} …” . “SELECT command …. (itab) …” . Die Struktur der internen Tabelle itab . Die Notwendigkeit von Klammern . Kein Tabelleninhalt in (itab) . Die Tabellenfeldnamen in Groß-/Kleinbuchstaben Unzulässiger Tabelleninhalt in (itab) . Die FROM-Klausel . Die INTO-Klausel . Die WHERE-Klausel . Der Befehl “SELECT” als allgemeiner Lesebefehl für … . Der Funktionsumfang des SELECT-Befehls . Die Datenbank . Die Datenbank verwendet eine eigene SQL-Sprache . Die ABAP/4® Datenbankbefehle – Open SQL . Die Interpretation der Datenbankbefehle . Die Schnittstellen innerhalb der Datenbank . Die verschiedenen Tabellenarten (Übersicht) . Transparente Tabellen . Pool-Tabellen . Cluster-Tabellen . Import/Export-Tabellen (Cluster) . VIEW-Tabellen . SELECT command {INTO destination} FROM source {WHERE cond} {GROUP BY tfs} {ORDER BY …} . Der SELECT-Befehl als Schleifenkonstruktion . Der Schleifenbefehl “SELECT * FROM etab … ENDSELECT” . Das Verlassen der Schleife . Keine Berechtigungsprüfungen beim Lesen mit “SELECT” . Auswirkung einer fehlenden Berechtigungsprüfung . “AUTHORITY-CHECK” . Fehlerhafte Vergabe von Berechtigungen . Anwendungsmöglichkeit in Report-Beispielen . “SELECT SINGLE …” . “SELECT SINGLE FOR UPDATE …” . “SELECT DISTINCT …” . READ-SELECT-SINGLE-FULLKEY . READ-SELECT-SINGLE-GT . READ-SELECT-SINGLE-KEY . READ-SELECT-SINGLE PARAMETERS . READ-OR-INSERT . SELECT-SINGLE-UPD . Test der Satzsperre . Start des 1. Workprozesses . Start des 2. Workprozesses . DELETEN-TESTLINE . SELECT-DISTINCT Aufgabenstellung . KEINE-DOPPELTEN-TEXTE . DISPLAY-ITAB. . SELECT – einige Report-Beispiele zum Überblick . SELECT * FROM etab … ENDSELECT; … WHERE bedingung; . Der SELECT-Befehl mit seiner umfangreichen Funktionsausstattung . Die einzelnen Bestandteile des SELECT-Befehls . SELECT-Klausel . INTO-Klausel . FROM-Klausel . WHERE-Klausel . GROUP-Klausel . ORDER-Klausel . Der “SELECT” als Schleifenbefehl . In der SELECT-Schleife die gelesenen Daten weiter bearbeiten . Ein formelles Beispiel: . WHERE bedingung … ENDSELECT.”(Syntax) . SELECT * . FROM etab . WHERE bedingung . Weitere Befehle nach dem SELECT … . ENDSELECT . Einige allgemeine Anwendungshinweise . Der Arbeitsbereich des SELECT-Befehls (global, lokal) . Der Tabellenarbeitsbereich . Der globale Tabellenarbeitsbereich . Ein Beispiel, die externe Tabelle YT100 wird deklariert: . Der lokale Tabellenarbeitsbereich . Keine automatische Löschung des Tabellenarbeitsbereiches . Das vorzeitige Verlassen der SELECT-Schleife mit “EXIT” . Das Systemfeld SY-SUBRC . SY-SUBRCE = 0 . SY-SUBRCE = 4 . Das Systemfeld SY-DBCNT . Der Basisbefehl “SELECT * FROM etab” in einigen Report-Beispielen . SELECT * FROM etab….. . Hervorzuheben ist der SELECT-Befehl mit der WHERE-Bedingung, . WHERE bedingung … ENDSELECT . REPORT-SELECT-WHERE-ALLG CLIENT SPECIFIED … ENDSELECT. . REPORT-SELECT-CLIENT FORM LESEN-CLIENT-AKTUELL . FORM LESEN-CLIENT-ALL . INTO xtab … ENDSELECT . Beispiel-Report FORM LESEN-VON-T100-in-IT100 . ORDER BY PRIMARY KEY … ENDSELECT . REPORT-SELECT-ORDER-BY-PRIMARY-KEY SELECT * FROM etab ORDER BY v1 … v9 … ENDSELECT . REPORT-SORTIERT-VON FORM LESEN-FELD-SORTIERT-1. . FORM LESEN-FELD-SORTIERT-2. . SELECT * FROM etab BYPASSING BUFFER … ENDSELECT . REPORT-SELECT-BYPASSING FORM LESEN-OHNE-PUFFER . SELECT * FROM etab UP TO n ROWS … ENDSELECT . REPORT-SELECT-UP-TO-ROWS FORM LESEN-NUR-BIS-ANZAHL-X . Kombinationen der Befehlsergänzungen . REPORT-SELECT-KOMBINATION FORM LESEN-MIT-DIV-KOMBIS . SELECT-Schleifenbefehle enthalten ein “ENDSELECT” . Grundsätzlich werden alle Tabellenzeilen gelesen . Die Unterbrechung der SELECT-Schleife ist möglich . Die FROM-Klausel – … im SELECT . Die einzelnen Bestandteile des SELECT-Befehls . SELECT-Klausel . INTO-Klausel . FROM-Klausel . WHERE-Klausel . GROUP-Klausel . ORDER-Klausel . Die FROM-Klausel “SELECT … FROM etab …” . Die direkte Angabe der zu lesenden Tabelle im Coding . Die indirekte Angabe des Tabellennamens in einer Variablen . Die Direktangabe des Tabellennamens im Coding der FROM-Klausel . “SELECT … FROM etab …” . Das Report-Beispiel 01 . TABLES T001 . SELECT * FROM T001 . ENDSELECT . Die Anzahl der selektierten Tabellensätze . SY-DBCNT . Der Standardarbeitsbereich: TABLES etab . Im DDIC muß etab deklariert sein . Nativ-Coding benötigt keine DDIC-Deklaration . Die verschiedenen Arten von externen Tabellen . Laufzeitfehler während der Programmdurchführung . Invalid Cursor . Die FROM-Klausel in Einzel- und Schleifenbefehlen . Der geschachtelte SELECT-Befehl . SY-DBCNT . Die SELECT-Schleife mit “SELECT SINGLE …” . “SELECT … FROM etab BYPASSING BUFFER …” . SELECT SINGLE … BYPASSING BUFFER . SELECT SINGLE … (ohne BYPASSING BUFFER) . INSERT mit sofortigem Lesen . Tabellenpuffer = nicht immer exakt aktuelle Daten . Einige Einflußfaktoren für die Tabellenpuffer . Größe des Gesamtpuffers . Verdrängung (zcsa/exchange_mode = on) . Einstellung der Pufferung von Tabellen im DDIC . Keine Freigabe zur Pufferung . “SELECT … FROM etab CLIENT SPECIFIED …” . Der Mandantenschlüssel als Variable oder Literal . Der Mandantenschlüssel als Variablenangabe . Mandanten-Tabellen (Begriff) . “CLIENT SPECIFIED..” nur in Verbindung mit “MANDT” . Das Weglassen von “MANDT” bei “CLIENT SPECIFIED” . Die Position von “MANDT” in der WHERE-Klausel . “SELECT … FROM etab UP TO n ROWS …” . Die Anzahl “n” als Variableninhalt oder Direktwert . Die Variable mit numerischem Inhalt . Eine leere Variable . Hauptanwendungsgebiete . Ist ein Tabelleninhalt überhaupt vorhanden? . Ist ein Teilvolumen der Tabelle “etab” vorhanden? . Anzeigen der ersten n Einträge eines sortierten Feldes . Die indirekte Angabe des Tabellennamens in einer Variablen . Formen der indirekten Angabe in der FROM-Klausel . Der Variablenname in runden Klammern . Die Variable als C-Feld mit 10 Stellen . INTO-Klausel Voraussetzung für indirekten Tabellennamen . “TABLES: etab” wird nicht benötigt. . Die Länge des Workbereiches . Die Ermittlung der Struktur der wahlweise angegebenen Tabelle . Gültiger Tabellenname zum Zeitpunkt der SELECT-Interpretation . Besondere Prüfroutinen erforderlich . “SELECT … FROM (vtab) …” . Die INTO-Klausel – Teil von SELECT . Die formellen Voraussetzungen bei … . In Zeitmessungen wird am Beispiel der INTO-Klausel . In 13 Report-Beispielen werden die … . Die einzelnen SELECT-Befehlsteile . SELECT-Klausel . INTO-Klausel . FROM-Klausel . WHERE-Klausel . GROUP-Klausel . ORDER-Klausel . Die INTO-Klausel “SELECT … INTO dest …” . Der Workbereich (= wb) als Feldleiste (einzeilige Struktur) . Der Workbereich (= wb) als interne Tabelle . Übertragung der Daten in eine leere Empfangstabelle . Erweiterung der internen Empfangstabelle (APPENDING) . Das Zeitverhalten unterschiedlicher INTO-Klauseln . Die Genauigkeit von Messungen . Mehrmalige Messungen mit unterschiedlichen Ergebnissen . Einige Einflußfaktoren bei Zeitmessungen . Die Datenübertragung in den Workbereich (Feldleiste, einzeilige Struktur) . Die Datentypen im DDIC und von ABAP/4® verwendete Datentypen . Wechselseitige Konvertierung von Datentypen (ABAP/4® – DDIC bzw. Datenbank) . “SELECT … INTO wb …” . Die Daten-Strukturen von Workbereich und gelesener Tabelle . Ein FAZIT . Ausreichende Länge von “wb” ist erforderlich . Die Verwendung von nichttypischen Feldinhalten . Der Workbereich als gesondert aufzubauende interne Tabelle . GET RUN TIME FIELD IFELD2 . Zeitvergleich von Beispiel 01 und 03 . “SELECT … INTO CORRESPONDING FIELDS OF wb . Der Zeitvergleich Report-Beispiel 04 zu 01 . “SELECT … INTO (v1, v2 … . INTO (ZARBGB1, ZMSGNR1, ZTEXT1) . Der Zeitverbrauch . Gleiche Anzahl der Felder in SELECT-Klausel und INTO-Klausel . Die Feldnamen in der INTO-Klausel in Klammern setzen . Die Verwendung von Feldnamen in SELECT-Klausel und INTO-Klausel . Gleiche Feldnamen nicht erforderlich . Die Feldnamen in der SELECT-Klausel . Die Feldnamen in der INTO-Klausel . Lokale Variablen sind bedingt zulässig . Feldsymbole sind auch zulässig . Konvertierung von DDIC-Datentypen in ABAP/4®-Datentypen . Konvertierungsprobleme sind nicht immer sofort erkennbar . Eine interne Tabelle als Workbereich für gelesene Tabellensätze . Übertragung der Daten in eine leere Empfangstabelle . “SELECT … INTO TABLE itab {PACKAGE SIZE n} …” . Keine Unterbrechung während des SELECT-Befehls . Keine Begrenzung der maximalen Anzahl von Tabellenzeilen . Aufbau von internen Tabellenbuffern . Die interne Worktabelle enthält nur aktuelle Tabellenzeilen . “SELECT … INTO TABLE itab PACKAGE SIZE n …” . SELECT … INTO … PACKAGE SIZE 10. . SELECT … INTO … BYPASSING BUFFER. . Eine grobe Zeitschätzung . Die Anwendung von Teilmengen in der Praxis . Ein Direktwert zur Angabe der Teilmenge einsetzen . Angabe von “0” als Teilmenge . Eine Variable zur Angabe der Teilmenge verwenden . Der Variableninhalt ist “0”. . Der Variableninhalt ist größer als die selektierte Menge . Der Variableninhalt ist negativ. . Keine veränderbare Teilmenge je Schleifendurchlauf . Zum Ausprobieren: User verändert Gesamtmenge und Teilmenge . SELECT … BYPASSING BUFFER … . Verändern der Eingabeparameter . “SELECT … INTO CORRESPONDING FIELDS OF TABLE itab …” . SELECT … INTO CORRESPONDING FIELDS OF TABLE ITAB1 … . Der alte Inhalt von “itab” wird gelöscht . Einzelbefehl – INTO-Klausel mit “… CORRESPONDING FIELDS …” . Ergänzung der internen Empfangstabelle (APPENDING) . Die Zeitschätzung . Der alte Inhalt der Worktabelle wird nicht gelöscht . Die Bearbeitung kleiner Selektionsmengen . BREAK-POINT ohne Laufzeitfehler . “SELECT … APPENDING CORRESPONDING FIELDS OF TABLE itab …” . “SELECT … APPENDING TABLE itab PACKAGE SIZE n … . SELECT … APPENDING … PACKAGE SIZE 10 . Die Auswertung der einzelnen Messungen in der Listausgabe . Die erste Zeitmessung . Die weiteren Zeitmessungen . Die Zeitmessung bei ca. 430 Zeilen . Die Zeitmessung bei ca. 860 Zeilen . Die Auswertung der SQL-Messung der Datenbank . Das Ergebnis der SQL-Messung . Das Fazit . Eine SQL-Messung auf dem Applikationsserver . “SELECT … APPENDING CORRESPONDING FIELDS OF TABLE itab PACKAGE SIZE n …” . Logische Operatoren – und WHERE … . WHERE-Klausel; Verschiedene Bedingungen von WHERE; . Selektieren von Tabellenzeilen; . WHERE bedingung; SELECT; UPDATE; DELETE; LOOP . Die logischen Operatoren in der WHERE-Klausel . Die verschiedenen Klauseln des SELECT-Befehls . SELECT-Klausel . INTO-Klausel . FROM-Klausel . WHERE-Klausel . GROUP-Klausel . ORDER-Klausel . Die WHERE-Klausel in unterschiedlichen Befehlen . SELECT … . UPDATE … . DELETE … . OPEN CURSOR … . LOOP at itab … . Der 1. und 2. Operand und der Operator in der WHERE-Klausel ” SELECT * FROM etab WHERE condition …” . Kein Schlüsselwort . Anwendungsbereich der Selektionsbefehle . Weitere Befehlsklauseln neben “WHERE …” . WHERE bedingung . Die einzelnen WHERE-Bedingungen mit ihren Operanden und Operatoren . Operanden . Das Tabellenfeld (1. Operand) . Der Vergleichsoperand (2. Operand) . Operatoren . Ersetzungsoperatoren . Eine allgemeine Klassifizierung von . Arithmetische Operatoren . Logische Operatoren (Vergleichsoperatoren) . Der NOT-Operator . Boolesche Operatoren (Verknüpfungen) . Der NOT-Operator . Stringoperatoren . Range-Operatoren (Bereiche) . Tabellen-Operatoren . WHERE tf1 logOP lv2 – Die wesentlichen Elemente . Die drei Objekte … . Der 1. Operand ist das Tabellenfeld tf1 . Der logische Operator logOP . Der 2. Operand ist der Vergleichswert lv2 . Ein Beispiel: . Kurzkommentar zum Report . Das Tabellenfeld (tf1) . Die logischen Operatoren (logOp) . Kleiner LT, < . Gleich EQ, = . Größer GT, > . Kleiner oder gleich LE, <=, =< . Ungleich NE, <>, >< . Größer oder gleich GE, >=, => . Das Literal oder die Vergleichsvariable (lv2) . Die Anwendung der logischen Operatoren in der WHERE-Klausel . Der EQ (Equal) . Schreibweise beachten . Blank (SPACE) ist nicht gleich 0 . Feldlänge beachten . Feldlänge zu klein . Feldlänge zu groß . Ein Beispiel-Report mit “WHERE … EQ” Der LT (Less Than) . Prüfung auf richtige Selektion . Die Reihenfolge der Datenanlieferung . Ein Report-Beispiel mit “WHERE … LT” Der GT (Greater Than) . Ein Report-Beispiel mit “WHERE … GT” Der logische Operator NE (Not Equal) . Ein Report-Beispiel mit “WHERE … NE” Der GE (Greater Equal) . Ein Report-Beispiel mit “WHERE … GE” Der logische Operator LE (Less Equal) . Die Report-Beispiele: Auf welche Details sollte geachtet werden ? . REPORT-WHERE-EQ REPORT-WHERE-LT REPORT-WHERE-GT REPORT-WHERE-LE REPORT-WHERE-GE REPORT-FEHLER-1 REPORT-FEHLER-2 REPORT-FEHLER-3 Booleschen Operatoren – und WHERE . AND; OR; NOT; Klammern; Boolesche Operatoren; . Operatoren der WHERE-Bedingung; . WHERE bedingung; Logische Operatoren; LT; EQ; GT; LE; NE; GE; . Die WHERE-Klausel mit booleschen Bedingungen . Die verschiedenen Klauseln des SELECT-Befehls . SELECT-Klausel . INTO-Klausel . FROM-Klausel . WHERE-Klausel . GROUP-Klausel . ORDER-Klausel . Die WHERE-Klausel in unterschiedlichen Befehlen . SELECT … . UPDATE … . DELETE … . OPEN CURSOR … . LOOP at itab … . Die booleschen Operatoren in der WHERE-Klausel . WHERE tf1 bedingung1 AND bedingung2 AND bedx . Auswahl eines einzelnen Tabellensatzes . WHERE tf1 bedingung1 OR bedingung2 OR bedx . WHERE bedingung1 AND NOT bedingung2 AND NOT … . WHERE bedingung1 OR NOT bedingung2 OR NOT … . Gültige Einzelbedingungen mit BOOL-Operatoren verknüpfen . Logische Operatoren (z.B. EQ, NE, GT …) . Kombination von logischen Einzelbedingungen . Die Klammerung in ihrer Außenwirkung . Die Klammerung in ihrer Innenwirkung . Die gelesenen Datensätze . BETWEEN lv1 AND lv2 . Kombination von “BETWEEN” und logischen Operatoren . Das Listergebnis . IS NULL . Kombination von “IS NULL” . IN (lv1, lv2 …) . Kombination von IN-Operator mit “AND”, “OR” . IN itab . Kombination von “IN itab” mit “AND” . LIKE lv2 . Der Primärschlüssel . Das Datenfeld “ZTEXT1” . Das Jokerzeichen “%” . FOR ALL ENTRIES IN itab WHERE condition . Deklaration ITAB . Verknüpfung von Einzelbedingungen . Verketten von Einzelbedingungen mit BOOL-Operatoren vornehmen . AND . OR . NOT . Die Verwendung von NOT in Verbindung mit Nicht-Bool-Operatoren NOT BETWEEN lv1 AND lv2 . IS NOT NULL . NOT IN (lv1, lv2 …) . NOT IN itab . NOT LIKE lv2 . Ungültige Einzelbedingungen in Verbindung mit BOOL-Operatoren . WHERE (itab) . WHERE condition AND (itab) . Die booleschen WHERE-Operatoren in der Praxis . Der Operator “AND” . “REPORT-WHERE-AND” Der Operator “OR” . “REPORT-WHERE-OR” Der Operator “NOT” in Verbindung mit “AND” . “REPORT-WHERE-AND-NOT” Der Operator “NOT” in Verbindung mit “OR” . “REPORT-WHERE-OR-NOT” Verschiedene BOOL-Operatoren in einer WHERE-Bedingung . “REPORT-WHERE-AND-OR-NOT” Zusammenfassung der Report-Beispiele . REPORT-WHERE-AND REPORT-WHERE-OR REPORT-WHERE-AND-NOT REPORT-WHERE-OR-NOT Mißverständliche Aufgabenstellung . STEP 1 . STEP 2 . REPORT-WHERE-AND-OR-NOT WRITE ausgabefeld – der Kontakt nach außen . Ein Kurzüberblick . Formatangaben (vor dem Ausgabefeld angeben) . Die Steuerungselemente “/ n (n)” . Feldbezeichnung (symb. oder relative Adresse) . Druckoptionen (nach dem Ausgabefeld . Datumsangaben . Zahlenaufbereitung . Position des Ausgabefeldes . Ausrichtung des Ausgabefeldes (ab 3.0) . Maskenausgabe . Ausgabeattribute zur Gestaltung der Ausgabefelder . Drucksteuerung von Symbolen, Ikonen, Windows usw. . Die Attribute (Eigenschaften) eines Ausgabefeldes . Die Steuerung durch Attribute je Ausgabefeld . COLOR n (oder COLOR OFF) . Die Zuordnung der Konstanten . Die Anwendung im WRITE-Befehl . Ganzzahlangabe . Angabe durch eine Konstante . INVERSE (oder INVERSE OFF) . INTENSIFIED (oder INTENSIFIED OFF) . INPUT (oder INPUT OFF) . HOTSPOT . Ein einfacher Mausklick genügt … . Kennzeichnung eines HOTSPOT-Feldes . Drucksteuerung von Symbolen, Ikonen, Windows usw. . Druckausgabe von Symbolen (ab 3.0) . Allgemeiner Anwendungshinweis . Druckausgabe von ICONs (ab 3.0) . Allgemeiner Anwendungshinweis . Druckausgabe von Linien (ab 3.0) . Allgemeiner Anwendungshinweis . Druckausgabe einer CHECKBOX (ab 3.0) . Allgemeiner Anwendungshinweis . Parametereingabe ” … AS CHECKBOX” . AT LINE-SELECTION . Einige Anwendungshinweise zum Befehl “WRITE ….” . Die verschiedenen Möglichkeiten Informationen auszugeben . WRITE ausgabefeld . TRANSFER satz . Funktionsbausteine einsetzen . Deklaration des allgemeinen Druckbereiches . “REPORT name LINE SIZE nnn” . “REPORT name LINE COUNT nnn” . “REPORT name … NO STANDARD PAGE HEADING” . Berücksichtigung von Informationen aus dem … . Die Verwendung von Druckersteuerzeichen . Beispiel einer Steuersequenz (für Seitenwechsel) . Drucksteuerungstabellen . WRITE (Nicht jeder WRITE druckt …) . Direktes Kopieren von Feldinhalten in eine andere . Indirektes Kopieren in eine andere Variable . Überschreiben bereits ausgedruckter Felder . NO-GAP . Wenn Drucklänge und Druckpositionen sich überlagern . Characterfelder (C, N, D, T,) . Rechenfelder und Hexadezimalfelder (I, P, F, X,) . WRITE ausgabefeld … – Reports . Formatangaben (vor dem Ausgabefeld angeben) . Die Steuerungselemente “/ n (n)” . Feldbezeichnung (symb. oder relative Adresse) . Druckoptionen (nach dem Ausgabefeld . Datumsangaben . Zahlenaufbereitung . Position des Ausgabefeldes . Ausrichtung des Ausgabefeldes (ab 3.0) . Maskenausgabe . Ausgabeattribute zur Gestaltung der Ausgabefelder . Drucksteuerung von Symbolen, Ikonen, Windows usw. . Die allgemeine Steuerungsmöglichkeiten des WRITE-Befehls . Einige wesentliche Funktionen des WRITE-Befehls . Die weitere Layoutgestaltung . Die vorhandenen Beispiel-Reports im Kurzüberblick . Druckposition, Drucklänge … . Druckaufbereitungen … . Farben, INPUT-Felder, HOTSPOT, SYMBOLE, ICONS… . REPORT-WRITE1 REPORT-WRITE2 REPORT-WRITE3 REPORT-WRITE4 REPORT-WRITE5 REPORT-WRITE6 REPORT-WRITE7 REPORT-WRITE8 REPORT-WRITE9 REPORT-WRITE10 REPORT-WRITE11 REPORT-WRITE12 REPORT-WRITE13 REPORT-WRITE14 REPORT-WRITE15 REPORT-WRITE16 DRUCK-OHNE-POSITIONSANGABE . WRITE-COLOR-N . WRITE-COLOR-INDIREKT . WRITE-COLOR-INDIREKT-INVERS . WRITE-COLOR-IND-ITENSIFIED . REPORT-WRITE17 DRUCK-OHNE-POSITIONSANGABE . WRITE-INPUTFELD . REPORT-WRITE18 DRUCK-OHNE-POSITIONSANGABE . WRITE-HOTSPOT-INPUT. . AT LINE-SELECTION . REPORT-WRITE19 DRUCK-OHNE-POSITIONSANGABE . DRUCK-MIT-AUSRICHTUNG-IM-FELD . DRUCK-MIT-AUSRICHTUNG-AUSGABE . WRITE-DO-AUSRICHTUNG . WRITE-DO-CENTERED . REPORT-WRITE20 DRUCK-OHNE-POSITIONSANGABE . WRITE-SYMBOL . WRITE-SYMBOL-ALL . DISPLAY-SYMBOL-MEMBER . REPORT-WRITE21 DRUCK-OHNE-POSITIONSANGABE . ANZEIGE-ICON-MEMBER . REPORT-WRITE22 DRUCK-OHNE-POSITIONSANGABE . WRITE-LINE . WRITE-LINE-ALL . ANZEIGE-LINE-MEMBER . REPORT-WRITE23 PARAMETERS . DRUCK-OHNE-POSITIONSANGABE . DRUCK-AS-CHECKBOX1 . AT LINE-SELECTION . DRUCK-AS-CHECKBOX2