DATA (ABAP Keyword) introduction & details
DATA
Variants
1.
DATA f.
2. DATA f(len).
3. DATA: BEGIN OF rec,
…
END OF rec.
4.
DATA: BEGIN OF itab OCCURS n,
…
END OF itab.
5. DATA: BEGIN OF COMMON
PART c,
…
END OF COMMON PART.
Effect
Defines global and local
variables. Variables allow you to address declared data objects . They always
have a particular data type. Data types and data objects are important
components of the ABAP/4 type concept .
Variant 1
DATA
f.
Additions
1. … TYPE typ
2. … LIKE f1
3. …
TYPE typ OCCURS n
4. … LIKE f1 OCCURS n
5. … TYPE LINE OF
itabtyp
6. … LIKE LINE OF itab
7. … VALUE lit
8. … DECIMALS
n
9. … WITH HEADER LINE
Effect
Creates the internal field f in
its standard length. If you do not specify the type (using the addition TYPE ),
a field of type C is assumed.
The field f can be up to 30 characters
long. You can use any characters you like except the special characters ‘(‘ ,
‘)’ , ‘+’ , ‘-‘ , ‘,’ and ‘:’ . Numeric characters are allowed but the field
name may not consist of numbers alone.
SPACE is a reserved word and
therefore cannot be used. Also, the field name cannot be the same as one of the
additional parameters of the introductory key word (e.g. PERFORM SUB USING
CHANGING. ).
Recommendations for field names:
Always use a letter as
the first character.
Use the underscore to join together words which are part
of the same name (e.g. NEW_PRODUCT ). The hyphen should not be used here, since
it is reserved for the names of field string components (see
below).
Addition 1
… TYPE typ.
Effect
Creates a field f of
the type typ . You can use either one of the predefined types listed below or
one of your own types which you define with TYPES .
The standard length ( SL
) of the field depends on the type.
Type Description SL Initial
value
C Text (character) 1 Blank
N Numeric text 1
’00…0′
D Date (YYYYMMDD) 8 ‘00000000’
T Time (HHMMSS) 6
‘000000’
X Hexadecimal 1 X’00’
I Whole number (integer) 4
0
P Packed number 8 0
F Floating point no. 8
‘0.0’
Example
DATA NUMBER TYPE I.
Creates the
field NUMBER as type I . You can also use it in the program, particularly if you
want to assign number values and perform calculations.
Notes
The data
type I is the whole number type on which the hardware is based. Its value range
is from -2**31 to 2**31-1 (from -2.147.483.648 to 2.147.483.647).
You use
type P for fields containing monetary amounts, but type I is more suitable for
number fields, index fields, specifying positions and so forth.
You
can use type F for positive and negative numbers other than zero in the range
from 1E-307 to 1E+308 with a degree of accuracy up to 15 decimal places. (The
ABAP/4 processor always uses the floating point operations of the hardware in
question rather than standardizing them.) Floating point literals must be
enclosed in quotation marks. The standard output length is 22.
Entries in
type F fields may be formatted in any of the following ways:
As a decimal
number with or without sign and with or without a decimal point.
In the
form e, where you specify the mantissa as above and the exponent with or without
a sign. (Examples of floating point literals: ‘1’ , ‘-12.34567’ , ‘-765E-04’ ,
‘1234E5’ , ‘+12E+34’ , ‘+12.3E-4’ .
Since floating point arithmetic is
fast on our hardware platforms, you should use it when you need a greater value
range and you are able to tolerate rounding errors. Rounding errors may occur
when converting the external (decimal) format to the corresponding internal
format (base 2 or 16) or vice-versa (ABAP/4 number types ).
Addition
2
… LIKE f1
Effect
Creates the field f with the same field
attributes as the field F1 which is already known. Any data objects are valid
(fields, parameters, structures, …) as long as types have been
assigned.
f1 can be any Dictionary reference.
Example
DATA
TABLE_INDEX LIKE SY-TABIX.
The field TABLE_INDEX now has the same
attributes as SY-TABIX (the index for internal tables).
Note
This
addition is often useful, since the ABAP/4 runtime system performs type changes
on fields automatically. Any unnecessary and/or unwanted conversions are thus
avoided.
Addition 3
… TYPE typ OCCURS n
Effect
Defines an
internal table without header line. Such a table consists of any number of table
lines with the type typ .
To fill and edit this table, you can use statements
like APPEND , READ TABLE , LOOP and SORT .
The OCCURS parameter n defines how
many tables lines are created initially. If necessary, you can increase the size
later. Otherwise, the OCCURS parameter is of no significance, apart from the
exception that applies with APPEND SORTED BY .
Example
TYPES:
BEGIN OF LINE_TYPE,
NAME(20) TYPE C,
AGE TYPE I,
END OF
LINE_TYPE.
DATA: PERSONS TYPE LINE_TYPE OCCURS 20,
PERSONS_WA TYPE
LINE_TYPE.
PERSONS_WA-NAME = ‘Michael’.
PERSONS_WA-AGE = 25.
APPEND
PERSONS_WA TO PERSONS.
PERSONS_WA-NAME = ‘Gabriela’
PERSONS_WA-AGE =
22.
APPEND PERSONS_WA TO PERSONS.
The internal table PERSONS now
consists of two table entries.
Note
Access to table entries not in
main memory takes much longer. On the other hand, there is not enough space in
main memory to hold such large tables because the roll area is resticted (see
above).
Addition 4
… LIKE f1 OCCURS n
Effect
Defines an
internal table without header line. Such a table consists of any number of table
lines with the structure as specified by the data object f1 . Processing is the
same as for addition 3.
Example
DATA: BEGIN OF
PERSON,
NAME(20),
AGE TYPE I,
END OF PERSON.
DATA: PERSONS LIKE
PERSON OCCURS 20.
PERSON-NAME = ‘Michael’.
PERSON-AGE = 25.
APPEND
PERSON TO PERSONS.
PERSON-NAME = ‘Gabriela’
PERSON-AGE = 22.
APPEND
PERSON TO PERSONS.
The internal table PERSONS now consists of two table
entries.
Addition 5
… TYPE LINE OF
itabtype
Effect
The specified type itabtyp must be an internal table
type. This operation creates a data object with the same line type as the table
type specified.
Example
TYPES TAB_TYP TYPE I OCCURS 10.
DATA TAB_WA
TYPE LINE OF TAB_TYP.
The data object TAB_WA now has the same
attributes as a line of the table type TAB_TYP and thus the type I
.
Addition 6
… LIKE LINE OF itab
Effect
The data object
tab must be an internal table with or without a header line. This operation
creates a data object with the same line type as the table
specified.
Example
DATA TAB TYP TYPE I OCCURS 10.
DATA TAB_WA TYPE
LINE OF TAB.
The data object TAB_WA now has the same attributes as a
line of the table TAB and thus the type I .
Addition 7
… VALUE
lit
Effect
The initial value of the field f is the literal lit instead
of that defined in the table above. You can also specify a constant or even use
IS INITIAL . In the latter case, the field is preset to the type-specific
initial value. This form is particularly important in connection with the
CONSTANTS statement which always requires you to use the addition VALUES
.
Example
DATA NUMBER TYPE I VALUE 123,
FLAG VALUE
‘X’,
TABLE_INDEX LIKE SY-TABIX VALUE 45.
When created, the field
NUMBER of type I contains 123 rather than the expected initial value of 0. The
newly created field FLAG of type C (length 1) contains ‘X’ , while TABLE_INDEX
contains 45, since the system field SY-TABIX is a numeric field.
Addition
8
… DECIMALS n
Effect
Only makes sense with field type P . When
you perform calculations and on output, the field has n decimal decimal places,
where n is a number between 0 and 14.
In the case of newly generated
programs, you normally activate fixed point arithmetic in the attributes. If it
is not set, the DECIMALS specification is taken into account on output, but not
when performing calculations. This means that the programmer must take care of
any decimal point calculations by multiplying or dividing by powers of ten. (see
COMPUTE )
Fixed point arithmetic should always be active when you are
performing calculations, since this enables intermediate results (for division)
to be calculated as accurately as possible (in this case, to 31 decimal
places).
To decide whether you should use the fixed point type P or the
floating point type F , see “ABAP/4 number types “.
Addition 9
…
WITH HEADER LINE
Effect
You can only use this addition with table
types. When you specify WITH HEADER LINE , you create a header line with the
same name type as a table line in addition to the table. With non-table
operations (e.g. MOVE ), the name f refers to this header line. With table
operations (e.g. APPEND ,
the name f refers to the table or the table and
header line. The notation f[] always denotes the table. The result of this
expression is a table without a header line and can be used as
such.
Example
DATA: BEGIN OF PERSON_TYPE,
NAME(20),
AGE TYPE
I,
END OF PERSON_TYPE.
DATA: PERSONS LIKE PERSON_TYPE OCCURS 20 WITH
HEADER LINE.
PERSON-NAME = ‘Michael’.
PERSON-AGE = 25.
APPEND
PERSONS.
PERSON-NAME = ‘Gabriela’
PERSON-AGE = 22.
APPEND PERSONS.
*
Delete header line
CLEAR PERSONS.
* Delete table
CLEAR
PERSONS[].
Variant 2
DATA
f(len).
Additions
As for variant 1
Effect
Creates
the field f in the length len .
You can use this variant only for fields
of type C , N , P and X . Any other field types must have their standard lengths
(see table under effect of variant 1).
The lengths allowed depend on the
field type:
Type Allowed lengths
C 1 – 65535
N 1 – 65535
P 1 –
16
X 1 – 65535
Note
Each byte can contain (one character or) two
decimal or hexadecimal digits. Since one place in type P fields is reserved for
the sign, a type P field of length 3 can contain 5 digits, whereas a type X
field of length 3 can hold 6 digits. Both have an output length of
6.
Variant 3
DATA: BEGIN OF rec,
…
END OF
rec.
Effect
Defines the field string rec which groups together all the
fields defined for the field string rec between ” BEGIN OF REC ” and ” END OF
rec “. Each field carries the prefix ” rec- “. Field strings can be nested to
any depth. See Data objects .
When a field string needs the same fields as an
already defined field string in addition to its own fields, you can include
these fields in the field string with INCLUDE STRUCTURE . If no additional
fields are needed, it is better to use LIKE .
Example
DATA: BEGIN
OF PERSON,
NAME(20) VALUE ‘May’,
AGE TYPE I,
END OF
PERSON.
PERSON-AGE = 35.
The field PERSON-NAME now contains the
contents “May”.
DATA: BEGIN OF PERSON1,
FIRSTNAME(20) VALUE
‘Michael’.
INCLUDE STRUCTURE PERSON.
DATA END OF
PERSON1.
Notes
If you list a field string as a field, this
field (” rec “) is type C , but you should not use a field string like a field,
if the field string contains number fields (i.e. type I , F or F ). The length
of rec is derived from the sum of the lengths of all components of rec .
However, since some fields (for example, to the limit of a word), they include
padding fields that also contribute to the overall length of rec ; for this
reason, you cannot use the lengths of fields that occur before a particular
field string component to calculate its offset to the start of the field string.
On the other hand, you can guarantee that two fields with the same structure
always have the same structure (even where padding fields are concerned). This
means that you can compare and assign fields directly below each other (with
MOVE , IF , etc.) and do not have to work field by field (e.g. with
MOVE-CORRESPONDING ).
INCLUDE s are aligned according to maxumum alignment of
their components. This applies both to INCLUDE s in ABAP/4 programs and also
INCLUDE s in Dictionary structures.
The TABLES statement
automatically defines a field string (the work area. Even the header line
belonging to an internal table (see below) is a field
string.
Variant 4
DATA: BEGIN OF itab OCCURS n,
…
END
OF itab.
Additions
… VALID BETWEEN f1 AND
f2
Effect
Defines the internal table itab .
An internal table
includes a header line, which is a field string containing the fields defined
between ” BEGIN OF itab OCCURS n ” and ” END OF itab ” (see variant 3), and any
number of table lines with the same structure as the header line.
To fill
and edit an internal table, you use various statements such as APPEND , LOOP and
SORT .
The OCCURS parameter n determines how many table lines are held in
main storage (the roll area). If you also generate table entries, these are
rolled out either to a main storage buffer or to disk (the paging
area).
Example
DATA: BEGIN OF PERSONS OCCURS
20,
NAME(20),
AGE TYPE I,
END OF PERSONS.
PERSONS-NAME =
‘Michael’.
PERSONS-AGE = 25.
APPEND PERSONS.
PERSONS-NAME =
‘Gabriela’.
PERSONS-AGE = 22.
APPEND PERSONS.
The internal
table now consists of two table entries.
PERSONS also includes the header
line (work area) through which all operations on the actual table
pass.
Note
Access to table entries not in main storage is considerably
slower. Also, main storage cannot hold large tables in their entirety, since the
size of the roll area is restricted (see above).
Addition
… VALID
BETWEEN f1 AND f2
Effect
Can appear only after ” END OF itab
“.
The sub-fields f1 and f2 of the internal table itab must have the
line-related validity range (see PROVIDE ).
Variant 5
DATA: BEGIN OF
COMMON PART c,
…..
END OF COMMON PART.
Effect
Defines one or
more common data areas in programs linked by external PERFORM calls. If only one
common data area exists, you can omit the name c . There may be just one unnamed
COMMON area or one or more named COMMON areas. You assign named COMMON areas to
each other by name. The structure of data areas must always be the same for both
the calling and the called program (otherwise, the program terminates with an
error message at runtime).
The table work areas are always in the common
data area.
In general, you define the area created as COMMON with a
common INCLUDE STRUCTURE . Occasionally, you use a INCLUDE report which contains
precisely the definition of the COMMON PART .
Field symbols cannot
belong to a common data area, even if the FIELD-SYMBOLS statement lies between
DATA BEGIN OF COMMON PART and DATA END OF COMMON PART .