Ansicht
Dokumentation

ABAPLOOP_AT_ITAB - LOOP AT ITAB

ABAPLOOP_AT_ITAB - LOOP AT ITAB

BAL_S_LOG - Application Log: Log header data   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

LOOP AT itab, Grundform

Kurzreferenz



LOOP AT itab result $[cond$].
  ...
  $[AT ...
    ...
  ENDAT.$]

  ...
ENDLOOP.

Wirkung

Mit dieser Variante der Anweisung LOOP AT itab werden Zeilen der internen Tabelle itab sequentiell gelesen und der Anweisungsblock zwischen LOOP und ENDLOOP einmal pro Zeile ausgeführt. Es werden entweder alle Zeilen oder eine durch eine oder mehrere Bedingungen cond angegebene Untermenge gelesen.

  • Das Ausgabeverhalten result bestimmt, wie und wohin der Zeileninhalt gelesen wird.
  • Die Bedingungen cond können aus folgenden optionalen Zusätzen bestehen:
  • Mit einem Zusatz USING KEY kann der Tabellenschlüssel bestimmt werden, mit dem die Schleife durchlaufen wird. Der Tabellenschlüssel beeinflusst die Reihenfolge der Verarbeitung der Zeilen.

  • Mit den Zusätzen FROM und TO für Indextabellen und WHERE für alle Tabellenarten kann die Schleifenverarbeitung auf eine Untermenge von Zeilen eingeschränkt werden.

  • Ein Zusatz STEP erlaubt die Definition einer Schrittgröße und der Richtung der Schleifenverarbeitung.

Die Reihenfolge der gelesenen Zeilen kann von folgenden Aspekten abhängen:

  • der Zusatz USING KEY
  • der Zusatz STEP

Wenn keine der Zusätze angegeben sind, hängt die Standardreihenfolge wie folgt von der Tabellenart ab:

  • Standard-Tabellen und sortierte Tabellen
Die Zeilen werden nach aufsteigenden Zeilennummern im primären Tabellenindex gelesen. Das Systemfeld sy-tabix enthält in jedem Schleifendurchlauf die Zeilennummer der aktuellen Zeile im primären Tabellenindex.
  • Hash-Tabellen
Die Zeilen werden in der Reihenfolge bearbeitet, in der sie in die Tabelle eingefügt wurden, und nach einer Sortierung mit der Anweisung SORT in der Sortierreihenfolge. Das Systemfeld sy-tabix enthält in jedem Schleifendurchlauf den Wert 0.

Die Schleife wird solange durchlaufen bis alle Tabellenzeilen der Tabelle oder der in der cond-Bedingung angegebenen Untermenge gelesen wurde oder bis sie mit einer Anweisung beendet wird. Falls keine entsprechenden Zeilen gefunden werden oder die interne Tabelle leer ist, wird die Schleife nicht durchlaufen.

Wenn die interne Tabelle als Rückgabewert bzw. Resultat einer funktionalen Methode, eines Konstruktorausdrucks oder eines Tabellenausdrucks angegeben ist, ist dieser Wert für die Dauer der Schleifenverarbeitung vorhanden. Anschließend kann nicht mehr auf die interne Tabelle zugegriffen werden.

Beim Ändern der internen Tabelle innerhalb einer Schleife gelten spezielle Regeln. Insbesondere sollten keine Schreibzugriffe auf den vollen Tabellenkörper durchgeführt werden.

Systemfelder

Diese Variante der Anweisung LOOP AT setzt den Wert des Systemfeldes sy-tabix:

  • Bei jedem Schleifendurchlauf für Indextabellen und bei Verwendung eines sortierten Schlüssels auf die Zeilennummer der aktuellen Tabellenzeile im zugehörigen Tabellenindex.

LOOP AT lässt sy-subrc unverändert. Nach dem Verlassen der Schleife über ENDLOOP wird sy-tabix auf den Wert gesetzt, den es vor dem Eintritt in die Schleife hatte, und für sy-subrc gilt:

sy-subrc Bedeutung
0 Die Schleife wurde mindestens einmal durchlaufen.
4 Die Schleife wurde nicht durchlaufen.

Zusätzlich werden die Systemfelder sy-tfill und sy-tleng versorgt.

Hinweise

  • Falls die Angabe der internen Tabelle itab über eine Referenzvariable erfolgt, wird die Schleife vollständig über die beim Eintritt referenzierte Tabelle ausgeführt. Eventuelle Änderungen der Referenzvariablen wirken sich nicht auf die Schleife aus. Das zugehörige Objekt kann so lange nicht vom Garbage Collector gelöscht werden, bis die Schleife beendet wurde. Das Gleiche gilt, wenn die Tabelle durch ein Feldsymbol repräsentiert wird. Auch nach einem Umsetzen des Feldsymbols innerhalb der Schleife wird weiterhin über die beim LOOP-Eintritt an das Feldsymbol gebundene Tabelle iteriert.

  • Es findet keine implizite Auswahl eines passenden Schlüssels oder Index statt. Der verwendete Tabellenschlüssel oder Tabellenindex ist immer eindeutig spezifiziert. Es kommt zu einer Warnung von der Syntaxprüfung, wenn es einen passenden sekundären Tabellenschlüssel gibt, dieser aber nicht verwendet wird. Diese Warnung sollte durch Verwendung des Schlüssels behoben werden. Sie kann in Ausnahmefällen aber auch durch ein Pragma umgangen werden.
  • Das Lesen mehrerer Zeilen in einer LOOP-Schleife ist in aller Regel günstiger als mehrere Einzelzeilenzugriffe über die Anweisung READ TABLE oder über Tabellenausdrücke.
  • Aus Kompatibilitätsgründen kommt es bei einem Austausch des Tabellenkörpers in der Schleife nur dann nicht zu einem Laufzeitfehler, wenn ohne Angabe eines Sekundärschlüssel eine direkt angegebene Tabelle gelesen wird und wenn für das Ausgabeverhalten result ein Arbeitsbereich wa angegeben ist.

Beispiel

Schleife über eine mit dem Wertoperator VALUE konstruierte interne Tabelle, wobei jede Zeile einem inline mit FIELD-SYMBOL deklarierten Feldsymbol zugewiesen wird.

Beispiel

Geschachtelte LOOP-Schleifen ohne explizite Schlüsselangabe. In der WHERE-Bedingung für die innere Schleife wird der Inhalt der aktuellen Zeile der äußeren Schleife ausgewertet.

Ausnahmen

Behandelbare Ausnahmen

CX_SY_ITAB_DYN_LOOP

  • Ursache: Fehler in der dynamischen WHERE-Bedingung
    Laufzeitfehler: DYN_WHERE_PARSE_ERROR

Unbehandelbare Ausnahmen

  • Ursache: Unzulässiges Umsetzen des LOOP-Feldsymbols im Rumpf der Schleife.
    Laufzeitfehler: ITAB_ILLEGAL_REG
  • Ursache: Unzulässige Zuweisung an die LOOP-Referenz im Rumpf der Schleife.
    Laufzeitfehler: MOVE_TO_LOOP_REF
  • Ursache: Unzulässiges Ändern des gesamten Tabellenkörpers in der Schleife
    Laufzeitfehler: TABLE_FREE_IN_LOOP
  • Ursache: Unzulässiger Zugriff auf einen Tabellenindex bei Verwendung eines Hash-Schlüssels..
    Laufzeitfehler: ITAB_ILLEGAL_INDEX_OP






CPI1466 during Backup   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 12871 Date: 20240418 Time: 100359     sap01-206 ( 167 ms )