Skip to content

ABAP Keyword Documentation →  ABAP - Reference →  Processing Internal Data →  Internal Tables →  Processing Statements for Internal Tables →  READ TABLE itab 

READ TABLE - result

Short Reference

Other versions: 7.31 | 7.40 | 7.54

Syntax


... { INTO wa [transport_options] } 
  | { ASSIGNING <fs> [CASTING] }
  | { REFERENCE INTO dref }
  | { TRANSPORTING NO FIELDS }.

Alternatives

1. ... INTO wa [transport_options]

2. ... ASSIGNING <fs> [CASTING]

3. ... REFERENCE INTO dref

4. ... TRANSPORTING NO FIELDS

Effect

There are four alternatives for the output behavior:

  • The addition INTO assigns the content of the found row to a work area.
  • The addition ASSIGNING assigns the found row to a field symbol <fs>.
  • The addition REFERENCE INTO creates a reference to the found row in a reference table.
  • The addition TRANSPORTING NO FIELDS specifies that only the relevant system fields are filled.


Note

Outside of classes, the addition INTO can also be specified together with TRANSPORTING NO FIELDS, but this produces a warning in the syntax check

Alternative 1

... INTO wa [transport_options]

Effect

The content of the found row is assigned to the work area wa. If the work area wa is incompatible with the row type of the internal table, the content of the table row is converted to the data type of the work area in accordance with the conversion rules. If no row is found, wa remains unchanged.

If the additions transport_options are used, the work area wa must be compatible with the row type of the internal table.


Note

For READ TABLE, an (external) obsolete short form exists where INTO wa can be omitted if the internal table has a header line itab with the same name. The statement is then implicitly enhanced by the addition of INTO itab. This short form is unrelated to the obsolete key specification, which also evaluates the header line.


Example

Reads a particular row in the internal table sflight_tab and assigns it to a work area sflight_wa. After the reference has been successfully assigned, the content of a component of the row is changed in the internal table.

PARAMETERS: p_carrid TYPE sflight-carrid, 
            p_connid TYPE sflight-connid, 
            p_fldate TYPE sflight-fldate. 

DATA sflight_tab TYPE SORTED TABLE OF sflight 
                 WITH UNIQUE KEY carrid connid fldate. 

DATA sflight_wa TYPE sflight. 

SELECT * 
       FROM sflight 
       INTO TABLE sflight_tab 
       WHERE carrid = p_carrid AND 
             connid = p_connid. 

IF sy-subrc = 0. 
  READ TABLE sflight_tab 
       WITH TABLE KEY carrid = p_carrid 
                      connid = p_connid 
                      fldate = p_fldate 
       INTO sflight_wa. 
  IF sy-subrc = 0. 
    sflight_wa-price = sflight_wa-price * p`0.9`. 
    MODIFY sflight_tab FROM sflight_wa INDEX sy-tabix. 
  ENDIF. 
ENDIF. 

Alternative 2

... ASSIGNING <fs> [CASTING]

Effect

The found table row is assigned to the field symbol <fs>. After the statement READ TABLE, the field symbol points to the table row in the memory. If no table row is found, <fs> remains unchanged.

As long as the field symbol points to the row, the assignment of values to the field symbol changes the row in the internal table. The following limitations apply to modifying key fields of the primary and secondary table key:

  • The key fields of the primary table key of sorted tables and hashed tables are read-only and must not be modified. This would invalidate internal table administration. Attempts to do this generally raise an unhandleable exception.
  • The key fields of a secondary table key, however, are only read-only while the secondary table is being used. This is the case in LOOP loops and during the use of the MODIFY statement, in which the secondary key is specified after USING KEY. Otherwise the key fields are not read-only.

The administration of unique secondary keys is updated after modifications are made to individual rows using field symbols the next time the internal table is accessed (delayed update). The administration of non-unique secondary keys is updated after the next explicit use of the secondary key (lazy update). The check on the uniqueness of a secondary key does not take place until the time of the update. An internal table might therefore be in an inconsistent state with respect to the secondary key after individual rows are modified using field symbols. An exception is not raised until the table is next used. If the next use is not directly after the modification, the secondary key can be explicitly updated using methods of the CL_ABAP_ITAB_UTILITIES class to handle possible exceptions on the spot.

The optional CASTING addition has the same meaning as if it were specified in the ASSIGN statement without any further additions. The field symbol must be either fully typed, or typed with one of the generic predefined ABAP types c, n, p, or x. The assigned table row is cast to the type of the field symbol. The same exceptions can be raised here as with ASSIGN.


Notes

  • The typing of the field symbol must be compatible with the row type of the internal table.
  • If the READ statement is successful (sy-subrc has value 0), it is guaranteed that the field symbol immediately after execution of the statement indicates a memory area. A query using IS ASSIGNED is not necessary there.
  • If the row to which the field symbol points is deleted, no more memory space is allocated to the field symbol and it can no longer be used instead of a data object. If the field symbol is not used directly after the READ statement, it may be useful to carry out a check using IS ASSIGNED.

Example

Selects a particular row in the internal table sflight_tab and assigns it to a field symbol <sflight>. After the reference has been successfully assigned, the content of a component of the row is changed in the internal table.

PARAMETERS: p_carrid TYPE sflight-carrid, 
            p_connid TYPE sflight-connid, 
            p_fldate TYPE sflight-fldate. 

DATA sflight_tab TYPE SORTED TABLE OF sflight 
                 WITH UNIQUE KEY carrid connid fldate. 

FIELD-SYMBOLS <sflight> TYPE sflight. 

SELECT * 
       FROM sflight 
       INTO TABLE sflight_tab 
       WHERE carrid = p_carrid AND 
             connid = p_connid. 

IF sy-subrc = 0. 
  READ TABLE sflight_tab 
       WITH TABLE KEY carrid = p_carrid 
                      connid = p_connid 
                      fldate = p_fldate 
       ASSIGNING <sflight>. 
  IF sy-subrc = 0. 
     <sflight>-price = <sflight>-price * p`0.9`. 
  ENDIF. 
ENDIF. 

Alternative 3

... REFERENCE INTO dref

Effect

A reference to the found table row is made in the data reference variable dref. If no row is found, dref remains unchanged.

By dereferencing the data reference, the content of the found table row can be evaluated and changed. The same limitations apply to the modification of key fields of the primary and secondary table key as for access using field symbols (see ASSIGNING addition).


Notes

  • If the static type of the data reference variables is not the generic type DATA, it must be compatible with the row type of the internal table.
  • If the READ statement is successful (sy-subrc has value 0), it is guaranteed that the data reference variable immediately after the execution of the statement indicates a row. A query using IS BOUND is not necessary here.
  • Alongside GET REFERENCE, REFERENCE INTO is the only way of creating stack references. Stack referencescan become invalid if the referenced data object is deleted.
  • When applied to internal tables in the heap REFERENCE INTO creates memory-retaining heap references.
  • All references (heap references and stack references) that point to rows from internal tables can become invalid when rows are deleted. If a data reference variable is not used directly after the READ statement, it may be useful to carry out a check using IS BOUND.

Example

Selects a particular row of the internal table sflight_tab and assignsa reference to the found row to the data reference variable sflight_ref. After the reference has been successfully assigned, the content of a component of the row is changed in the internal table.

PARAMETERS: p_carrid TYPE sflight-carrid, 
            p_connid TYPE sflight-connid, 
            p_fldate TYPE sflight-fldate. 

DATA sflight_tab TYPE SORTED TABLE OF sflight 
                 WITH UNIQUE KEY carrid connid fldate. 

DATA sflight_ref TYPE REF TO sflight. 

SELECT * 
       FROM sflight 
       INTO TABLE sflight_tab 
       WHERE carrid = p_carrid AND 
             connid = p_connid. 

IF sy-subrc = 0. 
  READ TABLE sflight_tab 
       WITH TABLE KEY carrid = p_carrid 
                      connid = p_connid 
                      fldate = p_fldate 
            REFERENCE INTO sflight_ref. 

  IF sy-subrc = 0. 
    sflight_ref->price = sflight_ref->price * p`0.9`. 
  ENDIF. 
ENDIF. 

Alternative 4

... TRANSPORTING NO FIELDS

Effect

If the addition TRANSPORTING NO FIELDS is used, the statement READ TABLE only checks whether the row that is being searched for exists, and fills the system fields sy-subrc and sy-tabix. The system cannot access the content of the found row.


Example

Checks whether a particular row exists in the internal table sflight_carr and assigns the row number in the primary table index of the found row in sy-tabix to idx.

PARAMETERS p_carrid TYPE scarr-carrid. 

DATA: scarr_tab TYPE SORTED TABLE OF scarr 
               WITH UNIQUE KEY carrid, 
      idx  TYPE i. 

SELECT * 
       FROM scarr 
       INTO TABLE scarr_tab. 

READ TABLE scarr_tab 
     WITH TABLE KEY carrid = p_carrid 
     TRANSPORTING NO FIELDS. 
IF sy-subrc = 0. 
  idx = sy-tabix. 
ENDIF. 

Continue

READ TABLE - transport_options

Internal Tables, Output Area