ABAP Keyword Documentation → ABAP - Reference → Processing Internal Data → Assignments → = - Assignment Operator
= - Assign Data Objects
Other versions: 7.31 | 7.40 | 7.54
Syntax
destination = dobj.
Effect
In the simplest assignment case, a data object dobj
is on the right side
of the assignment operator =
. This data object can be specified as described under
Reader Positions. The content of the data
object is assigned to the left side, destination
. If necessary, type-specific conversions are made in accordance with the
conversion rules. The variant shown here applies to all assignments between operands that are not reference variables. Special
rules apply to reference variables.
The following can be specified for destination
:
-
Any data object that can be specified in a writer position. The data type of the data object must be either
compatible with the data
type of
dobj
or it must be possible to convert the content ofdobj
into the data type ofdestination
in accordance with one of the conversion rules. -
An inline declaration
DATA(var)
. If the data type ofdobj
is complete, it is used for the declaration. Ifdobj
is a generically typed field symbol or a formal parameter of this kind, the following data types are used:
string
forcsequence
andclike
xstring
forxsequence
decfloat34
fornumeric
anddecfloat
p
with the length 8 and no decimal places ifp
is generic
- The standard key for a standard table type with generic primary table key
Notes
- A special assignment operator, ?=, which performs a down cast, is available for assignments of reference variables.
-
If
dobj
and/ordestination
are field symbols, then, as in all ABAP commands, the system works with the content of the data objects to which the field symbols point. The actual pointer content of a field symbol can only be changed using the statementASSIGN
or the additionASSIGNING
when processing internal tables (value semantics). -
Inline declarations are not possible for every conceivable generic type of
dobj
. This is because, even in an inline declaration in the position of an actual parameter, the rules for deriving the data type for a generically typed output parameter of a method apply. Here, the typing check allows fewer combinations than the conversion rules of an assignment. - Strings and internal tables are addressed internally using references. When assignments are made between strings and between internal tables of the same type (if the row type itself does not contain any table types), for performance reasons, only the internal administrative information is passed. After the assignment, the actual string or the actual table body of the source as well as the target object are addressed (sharing). Sharing is valid until the object is accessed to be changed. At this point, the sharing is canceled and a copy of the content is made. The sharing is displayed in the memory consumption display of ABAP Debugger and in the Memory Inspector tool. For internal tables where the row type itself contains internal table types, no sharing takes place. Sharing can, however, take place for the subtables with a certain row type.
-
If an internal table with a header line is specified as an operand of an assignment, in nearly all
operand positions, the header line is addressed and not the
table body. To address the table body of a table with a header line,
[]
must be appended to the table name. -
The statement
MOVE
is an obsolete way of assigning data objects.
Example
Assigns a literal to a text string.
DATA text TYPE string.
text = `blah`.
Example
Assigns a generically typed field symbol, <fs>
, to a data object,
number, declared inline. In the assignment, the field symbol has the type i
,
however the field number
is created with the type decfloat34
when the program is generated. A syntax check warning about this is hidden using the pragma ##type
.
FIELD-SYMBOLS <fs> TYPE numeric.
ASSIGN 1 TO <fs>.
DATA(number) = <fs> ##type.
Exceptions
Catchable Exceptions
CX_SY_CONVERSION_NO_NUMBER
-
Cause: Operand cannot be interpreted as number when assigned to a numeric data type
Runtime Error:CONVT_NO_NUMBER
CX_SY_CONVERSION_OVERFLOW
-
Cause: Overflow in arithmetic operation (type
p
, with specified length)
Runtime Error:BCD_FIELD_OVERFLOW
-
Cause: Operand too big or (interim) result too big
Runtime Error:CONVT_OVERFLOW
Non-Catchable Exceptions
-
Cause: Source field (type
p
) contains an incorrect BCD format
Runtime Error:BCD_BADDATA
-
Cause: Assignment for deep structures not allowed if they overlap
Runtime Error:MOVE_COMPLEX_OVERLAP
-
Cause: Type conflict in assignment between object references
Runtime Error:MOVE_INTERFACE_NOT_SUPPORTED
,
Runtime Error:MOVE_IREF_NOT_CONVERTIBLE
,
Runtime Error:MOVE_IREF_TO_OREF
,
Runtime Error:MOVE_OREF_NOT_CONVERTIBLE
-
Cause: Type conflict in assignment between data references.
Runtime Error:MOVE_DREF_NOT_COMPATIBLE
-
Cause: Assignment between the involved types is not supported
Runtime Error:MOVE_NOT_SUPPORTED
-
Cause: Constants and literals cannot be overwritten
Runtime Error:MOVE_TO_LIT_NOTALLOWED
-
Cause: Constants and literals cannot be overwritten
Runtime Error:MOVE_TO_LIT_NOTALLOWED_NODATA
-
Cause: During a loop on an internal table, an attempt is made to overwrite
a reference variable that is associated with the internal table using
REFERENCE INTO
.
Runtime Error:MOVE_TO_LOOP_REF