ABAP Keyword Documentation →  ABAP − Reference →  Processing External Data →  ABAP Database Accesses →  Open SQL →  Open SQL - Read Accesses →  SELECT → 

SELECT - INTO  Syntax Diagram

Short Reference

Syntax

... { INTO
      { {[CORRESPONDING FIELDS OF] wa}|(dobj1, dobj2, ...)} }
  | { INTO|APPENDING
         [CORRESPONDING FIELDS OF] TABLE itab [PACKAGE SIZE n] }
    [ creating ] ...  .

Alternatives:

1. ... INTO [CORRESPONDING FIELDS OF] wa

2. ... INTO (dobj1, dobj2, ... )

3. ... INTO|APPENDING [CORRESPONDING FIELDS OF] TABLE itab [PACKAGE SIZE n]

Effect

target specifies to which data objects the result set of a SELECT or FETCH statement is assigned. Either a single work area wa or a list of data objects dobj1, dobj2, ... can be specified after INTO, or an internal table itab can be specified after INTO or APPENDING.

If a LOB of the result set is associated with a LOB handle in the target, it may be necessary to use creating to specify whether a data stream or a locator is being used.

Notes

Alternative 1

... INTO [CORRESPONDING FIELDS OF] wa


Effect

For wa, a data object can be specified that must meet certain prerequisites without CORRESPONDING FIELDS OF being specified. If the result set consists of a single row, this row is assigned to wa. If the result set has multiple rows, SELECT must be followed by an ENDSELECT statement; the result set is assigned to the work area wa row-by-row and can be evaluated in the loop. After ENDSELECT, the work area wa contains the row that was assigned last. If used in the FETCH statement, a row is extracted at the current cursor position. If the result is empty, the work area remains unchanged.

The rows of the result set are assigned as follows, based on the columns specified after SELECT:

* specified without the addition CORRESPONDING FIELDS

If all columns are read using * and CORRESPONDING FIELDS is not specified, SELECT behaves as follows:

All other combinations

If the result set consists of a single column specified explicitly after SELECT or a single aggregate expression, then wa can be an elementary data object or a structure. If the result set consists of multiple columns, it must be a structure and the following rules apply:

Assignment rules apply to the individual assignments. If a LOB of a reference variable for LOB handle is assigned, a LOB handle is created.

Notes

Example

In this example, four columns of the result set are read into four correspondingly named components of a work area.

DATA wa TYPE spfli.

SELECT carrid connid cityfrom cityto
       FROM spfli
       INTO CORRESPONDING FIELDS OF wa.
  cl_demo_output=>write_data( wa ).
ENDSELECT.
cl_demo_output=>display( ).

Alternative 2

... INTO (dobj1, dobj2, ... )


Effect

If the result set consists of multiple columns or aggregate expressions specified explicitly after SELECT, a list of elementary data objects dobj1, dobj2, ... (in parentheses and separated by commas) can be specified after INTO. The same number of elementary data objects dobj must be specified as there are columns in the result set. The contents of the columns in the result set are assigned to the data objects from left to right, according to the order specified after SELECT. Assignment rules apply to the individual assignments. If a LOB of a reference variable for LOB handle is assigned, a LOB handle is created. If the result set is empty, the data objects remain unchanged.

If the result set consists of one row, the columns are assigned from that row. If the result set contains multiple rows, SELECT must be followed by an ENDSELECT statement; the columns of the result set are assigned to the data objects row-by-row and they can be evaluated in a loop. If used in the FETCH statement, the columns of the row are extracted at the current cursor position.

Example

In this example, four columns of the result set are read into four individually specified columns of a structure. Unlike in the previous example, the runtime environment does not compare names here.

DATA wa TYPE spfli.

SELECT carrid connid cityfrom cityto
       FROM spfli
       INTO (wa-carrid, wa-connid, wa-cityfrom, wa-cityto).
  cl_demo_output=>write_data( wa ).
ENDSELECT.
cl_demo_output=>display( ).

Alternative 3

... INTO|APPENDING [CORRESPONDING FIELDS OF] TABLE itab [PACKAGE SIZE n]


Addition:

... PACKAGE SIZE n

Effect

If the result set consists of multiple rows, an internal table itab of any table type can be specified after INTO or APPENDING. The row type of the internal table must meet the prerequisites.

The result set is inserted into the internal table itab row-by-row; a sorting process is executed in the case of a sorted table. If INTO is used, the internal table is initialized. Previous rows remain intact if APPENDING is used.

Before any assignment of a row of the result set, an initial row of the internal table itab is created and the row of the result set is assigned to this row. When assigning a row of the result set to a row of the internal table with or without CORRESPONDING FIELDS, the same rules apply as when assigning to an individual work area wa (see above) with the exception that when inserting into internal tables, LOB handles can be created as locators but not as read streams.

If the PACKAGE SIZE addition is not used, all rows of the result set are inserted in the internal table itab and the ENDSELECT statement must not be specified after SELECT.

If the result set is empty, the internal table is initialized when INTO is used, and remains unchanged when APPENDING is used.

Notes

Addition

... PACKAGE SIZE n

Effect

If the addition PACKAGE SIZE is specified, all rows of the result set for SELECT are processed in a loop, which must be closed with ENDSELECT. They are inserted in packages of n rows in the internal table itab. n expects a data object of type i that contains the number of rows. If the value of n is less than 0, an exception is raised that cannot be handled. If n is equal to 0, all rows of the result set are inserted in the internal table itab. If used in the FETCH statement, n rows are extracted from the current cursor position.

If INTO is used, the internal table is initialized before each insertion and, in the SELECT loop, it only contains the rows of the current package. If APPENDING is used, a further package is added to the existing rows of the internal table for each SELECT loop or for each extraction using FETCH.

After ENDSELECT, the content of itab is not defined if INTO is used. That is, the table can either contain the rows of the last package or it can be initial. If APPENDING is used, the content of itab retains the state of the last loop pass.

Notes

Example

In this example, all columns of a result set are read into an internal table, the row type of which is a nested structure with the same structure as the result set. Note that in practice, the column carrid exists twice in the result set with the same content and, after the assignment, this content is stored redundantly in the columns struc1-carrid and struc2-carrid of the internal table.

DATA: BEGIN OF wa,
        struc1 TYPE scarr,
        struc2 TYPE spfli,
      END OF wa.

DATA itab LIKE SORTED TABLE OF wa
          WITH UNIQUE KEY table_line.

DATA: BEGIN OF output_wa,
        carrid LIKE wa-struc1-carrid,
        carrname LIKE wa-struc1-carrname,
        connid LIKE wa-struc2-connid,
      END OF output_wa,
      output LIKE TABLE OF output_wa WITH EMPTY KEY.

SELECT *
       FROM scarr
         INNER JOIN spfli ON scarr~carrid = spfli~carrid
       INTO TABLE itab.

LOOP AT itab INTO wa.
  output_wa-carrid = wa-struc1-carrid.
  output_wa-carrname = wa-struc1-carrname.
  output_wa-connid = wa-struc2-connid.
  APPEND output_wa TO output.
ENDLOOP.

cl_demo_output=>display_data( output ).




Continue
SELECT - CREATING
SELECT - Assignment Rules
SELECT - LOB Handles