READ (ABAP Keyword)

READ is a keyword used in SAP ABAP programming.This tutorial covers its introduction & syntax details.

READ


READ - Read an internal table


Basic form
READ TABLE itab.
READ TABLE itab INTO wa.

Additions


1a. ... WITH KEY k1 = v1 ... kn = vn
1b. ... WITH KEY = value
1c. ... WITH KEY key
2. ... BINARY SEARCH
3. ... INDEX idx
4a. ... COMPARING f1 f2 ...
4b. ... COMPARING ALL FIELDS
5a. ... TRANSPORTING f1 f2 ...
5b. ... TRANSPORTING NO FIELDS

Effect
Reads an internal table entry. An entry can be chosen using a key or its index.

With " READ TABLE itab. ", the header line of the internal table itab is used as the output area; with " READ TABLE itab INTO wa. " the explicity specified work area wa is used for this purpose.

The return code value of SY-SUBRC specifies whether a suitable entry was found. In turn, this determines the value of the table index SY-TABIX .

SY-SUBRC = 0 Entry found

SY-TABIX is set to the index of the found entry.

SY-SUBRC <> 0 Entry not found

The value of SY-TABIX is undefined.
The output area remains unchanged.

Note
In the case of internal tables with a header, a table line can be accessed without specifying an explicit key (addition: WITH KEY ... ) or index (addition: INDEX idx ). The system then uses (as an implicit key) all table header fields that are not number fields (type I, F, P), are not tables themselves (compare default keys of internal tables) and whose contents are unequal to SPACE . It searches for the first entry which matches the header in all key fields and transfers this entry into the output area.

The implicit key is only set up (dynamically) at runtime. If the search key is already known at the time of generation (static), the read with an explicit key is faster than with an implicit key, and is therefore preferable.

Addition 1a
... WITH KEY k1 = v1 ... kn = vn

Effect
Accesses the first entry which matches v1 ... vn in the components specified with k1 ... kn . Here, the component type forms the basis for the comparison between the components and the values. If the type of a value and the type of a component are not compatible, the value is converted to the type of the component before the read access is performed.

Notes
If a component is not determined until runtime, you can use WITH KEY ... (ni) = vi ... to specify it dynamically as the contents of the field ni . If ni is empty at runtime, the component is ignored. If ni contains an invalid component name, a runtime error occurs.
You can use offset and/or length specifications to further restrict components, regardless of whether they have been specified statically or dynamically.

Addition 1b
... WITH KEY = value

Effect
Accesses the first entry which matches value . In this case, the type of the table line forms the basis for the comparison between table lines and the specified value. If the type of the specified value and the type of the table line are not compatible, the specified value is converted to the type of the table line before the read access is performed.

Note
Even with internal tables containing lines with no components, the addition WITH KEY = value allows you to access an entry via an explicity specified key. Internal tables without line components result when you define internal tables directly via an elementary data type or a table type, but not via a field string.

Addition 1c
... WITH KEY key

Effect
Accesses the first entry which begins with key (left-justified). The type of the specified key forms the basis for the comparison between table lines and the specified key.

Note
The key key can be neither a table nor a structure that contains tables as components.

Note
Runtime errors (only when using addition 1c):

READ_BAD_KEY_ALIGN : The alignment requirements of the key take priority over those of individual table lines.

READ_BAD_KEY_PARTIAL : The key is longer than a table line and cannot be shortened.


Addition 2
... BINARY SEARCH

Effect
The addition BINARY SEARCH only makes sense with one of the WITH-KEY additions (1a-1c).

The read access is performed using a binary search method and is non-sequential. It is assumed that the internal table is sorted in ascending order according to the specified key, with addition 1a in the order of the specified key fields.

If the specified key is not unique, the entry with the lowest index is placed in the output area.

The return code value of SY-SUBRC specifies whether a suitable entry was found. In turn, this determines the value of the table index SY-TABIX .

SY-SUBRC = 0 Entry found

SY-TABIX is set to the index of the found entry

SY-SUBRC <> 0 Entry not found

The output area remains unchanged.

SY_SUBRC = 4 SY-TABIX points to the next largest entry.

SY-SUBRC = 8 The key sought is greater than that of the last table entry.

SY-TABIX is set to (number of all entries + 1).

Example

DATA: BEGIN OF INT_TABLE OCCURS 100,
COMP1,
COMP2,
COMP3,
END OF INT_TABLE.

FORM PUT_ENTRY USING ENTRY LIKE LINE OF INT_TABLE.
READ TABLE INT_TABLE WITH KEY COMP2 = ENTRY-COMP2
BINARY SEARCH
TRANSPORTING NO FIELDS.
IF SY-SUBRC <> 0.
INSERT ENTRY INTO INT_TABLE INDEX SY-TABIX.
ENDIF.
ENDFORM.


The method used in this subroutine makes it easy (and desirable for performance) to add new entries to a table and sort them.
Before PERFORM PUT_ENTRY , you fill the transferred work area ENTRY with the new values. The READ statement checks (in the sorted internal table INT_TABLE ) whether an entry with the specified key already exists. The system fields SY-SUBRC and SY-TABIX are set accordingly. Then, if ( SY-SUBRC <> 0 ), the new entry is inserted at the appropriate place.

Addition 3
... INDEX idx

Effect
Accesses the entry with the index idx of an internal table.

The return code value of SY-SUBRC specifies whether a suitable entry was found. In turn, this determines the value of the table index SY-TABIX .

SY-SUBRC = 0 Entry found

SY-TABIX is set to the index of the found entry.

SY-SUBRC <> 0 Entry not found

The value of SY-TABIX is undefined.
The output area remains unchanged.

Addition 4a
... COMPARING f1 f2 ...

Effect
This addition has no effect on the read process itself, i.e. it is normally used together with one of the additions 1, 2 or 3.

Only when an entry - regardless of the read method - already exists does this addition cause the contents of the sub-fields f1, f2, ... of the found entry to be compared with the corresponding fields of the output area before transporting the found entry to the output area.

The return code value of SY-SUBRC specifies whether the value sought was found and, if so, the result of the comparison:

SY-SUBRC = 0 Entry found, field contents identical
SY-SUBRC = 2 Entry found, field contents different
SY-SUBRC > 2 Entry not found
If you want to indicate explicitly that no fields are compared (even though this is the default), you can use COMPARING NO FIELDS .

Notes
If you use COMPARING together with an explicitly specified work area, the lattter must be compatible with the line type of the internal table.
If a comparison criterion is not known until runtime, you can use COMPARING ... (name) ... to specify it dynamically as the contents of the name . If name is blank at runtime, the comparison criterion is ignored. If name contains an invalid component name, a runtime error occurs.
You can use offset and/or length specifications to further restrict comparison criteria, regardless of whether they have been specified statically or dynamically.
If you use READ TABLE itab in its basic form (i.e. without one of its additions 1, 2 or 3, the addition COMPARING f1 f2 ... makes sense only if the fields f1, f2, ... are not part of the read key, i.e. if f1, f2, ... are number fields (type I, F or P).

Addition 4b
... COMPARING ALL FIELDS

Effect
As with addition 4a, but compares all sub-fields.

Addition 5a
... TRANSPORTING f1 f2 ...

Effect
If an entry is found, not all sub-fields are transported to the output area (default), but only the specified sub-fields f1, f2, ... ; the other sub-fields remain unchanged.
If you want to indicate explicitly that all fields are transported (even though this is the default), you can use TRANSPORTING ALL FIELDS .

Notes
If you use TRANSPORTING f1 f2 ... together with an explicitly specified output area, the latter must be compatible with the line type of the internal table.
If a transport field is not known until runtime, you can use TRANSPORTING ... (name) ... to specify it dynamically as the contents of the name . If name is blank at runtime, the transport criterion is ignored. If name contains an invalid component name, a runtime error occurs.
You can use offset and/or length specifications to further restrict transport fields, regardless of whether they have been specified statically or dynamically.
If you use the additions " COMPARING " and " TRANSPORTING " together, " COMPARING " must come before " TRANSPORTING ".

Addition 5b
... TRANSPORTING NO FIELDS

Effect
Does not change the output area of the internal table. The only purpose of the access is to set the system fields SY-SUBRC and SY-TABIX .

Note
Performance

The fastest way of reading a single record from an internal table is to make a direct access by specifying an index, because this is not dependent on the number of table entries and is much the same as the cost of transporting one line.
If you use a key to access the table, the required runtime increases with the number of lines and the size of the search key. A binary search is considerably faster than a linear search. Therefore, it is usually advisable to keep the table sorted and to use the addition BINARY SEARCH .

Reading a record from a table with 100 entries with an index specification requires about 7 msn (standardized microseconds). Access with a 30-byte wide key takes about 25 msn. with a binary search, and about 100 msn. without a binary search.
If you use statements with an explicit work area for internal tables with a header line, you can avoid unnecessary assignments.



READ - Read a list line


Variants


1. READ LINE lin.
2. READ LINE lin OF CURRENT PAGE.
3. READ LINE lin OF PAGE pag.
4. READ CURRENT LINE.

Variant 1
READ LINE lin.

Additions



1. ... INDEX idx
2. ... FIELD VALUE f1 INTO g1
...
fm INTO gm

Effect
Reads line no. lin in the list, for instance by line selection ( AT LINE-SELECTION , AT PFxx, AT USER-COMMAND ).
Places the read line in the field SY-LISEL and automatically restores all 'hidden' information (see HIDE ) to the original fields.
Sets the output format of the read line for all subsequent MODIFY LINE and WRITE statements.

The return code value is set as follows:


SY-SUBRC = 0 Line exists
SY-SUBRC <> 0 Line does not exist

Addition 1
... INDEX idx

Effect
With multiple line selection, reads the line from the list generated in level idx (0,1,2,...).

Addition 2
... FIELD VALUE f1 INTO g1
...
fm INTO gm

Effect
Transports the contents of the fields f1 , f2 , ... from the read list line to the fields g1 , g2 , ... . (The field contents stored in the list line always have the type C; type conversion is the same as for MOVE .)

Note
All formatting characters in the list output of f1 , f2 , ... count as field contents. If a field is output several times on the selected line, only the first occurrence is taken into account. If the field (such as f2 ) is not output on the line at all, the field g2 remains unchanged. The addition INTO g2 , for example, can be omitted if the field contents are to be restored to the original field (e.g. f2 ), i.e.


... FIELD VALUE ... f2


has the same effect as


... FIELD VALUE ... f2 INTO f2


Since the return code value in SY-SUBRC is not affected by the addition FIELD VALUE , it depends only on the existence of the selected list line.

Note
The addition FIELD VALUE is especially suitable for processing user input in list fields (see FORMAT , WRITE ) in the program. (Field contents entered by the user cannot be addressed with HIDE .)

Example
You can make a line "selectable" with


DATA MARKFIELD(1) TYPE C.
...
WRITE: / MARKFIELD INPUT, 'Text'.


After line selection, you can use


CLEAR MARKFIELD.
READ LINE SY-CUROW FIELD VALUE MARKFIELD.


in the program to check whether the user has selected the line or not ( IF MARKFIELD = SPACE ... ).

Variant 2
READ LINE lin OF CURRENT PAGE.

Additions


As with variant READ LINE

Effect
As with variant READ LINE lin . The line number lin refers to the current page (as specified in the system field SY-CPAGE at the beginning of the current event. If the contents of SY-CPAGE is changed by the application program, this does not affect the display.)

Notes
With multiple level line selection, the read operation is always take place in the list where line selection was performed.
When returning from line selection, the system always resets the positioning to the last page displayed. (For scrolling purposes, you can use the SCROLL statement.)

Variant 3
READ LINE lin OF PAGE pag.

Additions

As with variant READ LINE

Effect
As with variant 2, but reads the page pag instead of the current page.

Variant 4
READ CURRENT LINE.

Addition

... FIELD VALUE f1 INTO g1
...
fm INTO gm

Effect
Reads the last line to be read (by line selection or with READ LINE ) once again. You can use this variant, for example, in connection with the addition FIELD VALUE (see below) .u.) if you want to retrieve field contents from the selected line (in cases where you cannot retrieve from the HIDE area).

Addition
... FIELD VALUE f1 INTO g1
...
fm INTO gm

Effect
See addition 2 of the variant READ LINE lin



READ - Read a program


Basic form
READ REPORT prog INTO itab.

Effect
Reads the program prog from the database into the internal table itab . Table itab should be at least 72 lines long.
The return code value is set as follows:


SY-SUBRC = 0 Program was read.
SY-SUBRC <> 0 Program could not be read.

Example

DATA: PROGRAM LIKE SY-REPID VALUE 'PROGNAME',
BEGIN OF T OCCURS 500,
LINE(72),
END OF T.
READ REPORT PROGRAM INTO T.
IF SY-SUBRC <> 0.
...
ENDIF.



READ - Read text elements


Basic form
READ TEXTPOOL prog ... INTO itab ... LANGUAGE lg.

Effect
Reads the text elements for the program prog and the language lg from the library into the internal table itab . The line structure of the table itab is described in the section on text elements

The return code value is set as follows:


SY-SUBRC = 0 Text elements were read.
SY-SUBRC <> 0 Unable to read text elements.

Example
Read text elements for the program PROGNAME :


DATA: PROGRAM(8) VALUE 'PROGNAME',
TAB LIKE TEXTPOOL OCCURS 50 WITH HEADER LINE.

READ TEXTPOOL PROGRAM INTO TAB LANGUAGE SY-LANGU.



READ - Read a file


Basic form
READ DATASET dsn INTO f.

Addition


... LENGTH len

Effect
Reads a record from the sequential file specified in dsn (a field or a literal) and stores it in the field f (usually a field string).

Binary mode (addition IN BINARY MODE in the OPEN DATASET statement:

Read from file in length of field f .

Text mode (addition IN TEXT MODE in the OPEN statement):

Read a line.

If the specified file is not open, READ DATASET attempts to open the file dsn ( IN BINARY MODE FOR INPUT or with the specifications of the last OPEN command for this file). Any errors result in the termination of the program.
To read all the records in a file, you are recommended to place READ DATASET in a DO loop that you leave with EXIT .

The return code value is set as follows:


SY-SUBRC = 0 Record read from file.
SY_SUBRC = 4 End of file reached.

Example
Define the field string REC :


DATA: BEGIN OF REC,
TEXT(30),
NUMBER TYPE I,
END OF REC.


Read the file "/usr/test":


DO.
READ DATASET '/usr/test' INTO REC.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
WRITE: / REC-TEXT, REC-NUMBER.
ENDDO.



Notes
You can use TRANSFER to output records to a sequential dataset.


The format of file names depends largely on the operating system. You can access portable programs by using the function module FILE_GET_NAME which returns the physical name for a given logical file name.


Addition
... LENGTH len

Effect
Stores the length of the record read from the file in the field len .



READ - Read a database table


Basic form
READ TABLE dbtab.

Additions


1. ... SEARCH FKEQ
2. ... SEARCH FKGE
3. ... SEARCH GKEQ
4. ... SEARCH GKGE
5. ... WITH KEY key
6. ... VERSION vers

Note
This variant is no longer maintained and should therefore not be used (see also obsolete lanuguage elements ). Please use a SELECT (SINGLE) statement instead.

Effect
Accesses the database table dbtab
The table dbtab must be declared under TABLES in the program. dbtab is a table name which begins with "T" and comprises no more than five characters altogether.
You must fill the argument fields of the table first; then you can use READ TABLE to make direct access to the table entry.

Example
Declare table:


TABLES T006.


Fill argument fields:


MOVE: '001' TO T006-MANDT,
'STD' TO T006-MSEHI.


Access:


READ TABLE T006.


Process fields:


WRITE T006-DIMID.


Addition 1
... SEARCH FKEQ Full Key Equal (Default)
Addition 2
... SEARCH FKGE Full Key Greater or Equal
Addition 3
... SEARCH GKEQ Generic Key Equal
Addition 4
... SEARCH GKGE Generic Key Greater or Equal

Effect
Access table using one of the above search methods.

Note
You can only specify one of the additions 1 - 4

Addition 5
... WITH KEY key

Effect
Access table with the key key .

Addition 6
... VERSION vers

Note
You should use this addition only if absolutely necessary. In some cases, it is possible (and it makes sense) to avoid this READ addition by using a generation program.

Effect
Specifies a dynamically definable table name. The field vers must be a 4-character C field which contains the table name. It is generally declared under PARAMETERS and evaluated at runtime.
The entry read is always made available in the permanently assigned table T...

The return code value of SY-SUBRC specifies whether a suitable entry was found:

SY-SUBRC = 0 Entry found
SY-SUBRC <> 0 Entry not found
If the entry is not found, the system automatically sets the function part of the table entry to SPACE .



READ - Determine calendar information

The READ CALENDAR statement exists only in the R/2 System. In the R/3 System, the following function modules are substituted:

DATE_COMPUTE_DAY :

Returns the day for a date

DATE_CONVERT_TO_FACTORYDATE :

Returns the factory calendar date for a date

DATE_GET_WEEK :

Returns the week in which a date occurs

EASTER_GET_DATE :

Returns the Easter dates for a year

FACTORYDATE_CONVERT_TO_DATE :

Returns the date for a factory calendar date

HOLIDAY_CHECK_AND_GET_INFO :

Checks whether a date is a public holiday and, if necessary, returns information

WEEK_GET_FIRST_DAY :

Returns the first day of a week

Most readed SAP Tutorials

Latest Added SAP documents

Custom Search
ABAP Tutorials ABAP Syntax BAPI SAP Jobs SAP Glossary SAP Netweaver SAP XI SAP Download SAP Interview questions

Complete SAP Study materials | SAP JOBS | PDF Tutorials   List of SAP Companies India

Google-Translate-Chinese (Simplified) BETA Google-Translate-English to French Google-Translate-English to German Google-Translate-English to Italian Google-Translate-English to Japanese BETA Google-Translate-English to Korean BETA Google-Translate-English to Russian BETA Google-Translate-English to Spanish

All of the product names here are trademarks of their respective companies. The site sapbrainsonline.com no way affiliated with SAP AG. Use information on this site at your own risk. Information furnished in the site is collected from various sites and posts from users. This site does not host any files on its server. If any compliants about the posts please contact us at sapbrain.support@gmail.com

Sitemap
web counter