READ TABLE itab
  [ [FROM record] |
    [WITH TABLE KEY {field = value}] |
    [WITH KEY {field = value} [BINARY SEARCH] ] |
    [INDEX index] ]
  [INTO record]
  [ASSIGNING <field_symbol>]
  [COMPARING fieldlist | ALL FIELDS]
  [TRANSPORTING fieldlist | NO FIELDS].

Diese Anweisung liest einen Datensatz aus einer internen Tabelle. Es arbeitet generisch und kann daher alle Arten interner Tabellen verarbeiten. Das Ergebnis wird entweder in der Kopfzeile der Tabelle oder in einem mit INTO benannten Arbeitsbereich zur Verfügung gestellt. Übertragen werden dabei alle Felder, sofern nicht mit TRANSPORTING eine Auswahl angegeben wird. Falls es nur darauf ankommt, einen Datensatz zu finden (Existenzprüfung bzw. Indexermittlung) spart das Unterdrücken der Wertübertragung mit TRANSPORTING NO FIELDS Abarbeitungszeit.
Der zu lesende Datensatz kann durch verschiedene Methoden ausgewählt werden. Mit INDEX wird die Datensatznummer angegeben. Durch die unterschiedlichen WITH KEY-Zusätze wird ein Suchschlüssel definiert, entweder feldweise oder durch Angabe eines Arbeitsbereiches mit mehreren Schlüsselwerten. Im Zusammenhang mit WITH KEY kann mit dem Zusatz BINARY SEARCH die Suche beschleunigt werden, wenn die Tabelle entsprechend dem verwendeten Schlüssel vorsortiert ist. Die Anweisung führt dann anstelle der sequentiellen eine binäre Suche durch. Die Standardform des READ-Kommandos (ohne WITH KEY-Zusatz) erwartet den Schlüssel in der Kopfzeile der internen Tabelle, der entweder im Kopfsatz der Tabelle oder einem mit FROM benannten Arbeitsbereich stehen muß. Der Schlüssel besteht dann aus allen Feldern der Kopfzeile, die nicht den Typ I, F oder P haben und deren Inhalt ungleich dem Leerzeichen ist.
Der Zusatz COMPARING führt einen zusätzlichen Vergleich zwischen den Feldern des gelesenen Satzes und der Kopfzeile aus. Er verhindert nicht die Übertragung des Satzes, sondern setzt nur das Systemfeld SY-SUBRC. Er ist zur Überprüfung von Nicht-Schlüsselfeldern hilfreich.
Durch den Einsatz von ASSIGNING kann eine Referenz direkt in den Tabellenrumpf erzeugt werden. Damit ist es möglich, Daten in der internen Tabelle ohne Umweg über den Arbeitsbereich zu ändern.
Beachten Sie bitte, daß mit WITH TABLE KEY der in der Tabellendefinition festgelegte komplette Schlüssel benutzt werden muß, während bei WITH KEY beliebige Felder zur Suche benutzt werden können.