ABAP Keyword Documentation → ABAP - Reference → Obsolete Language Elements → Obsolete Object Creation
ASSIGN LOCAL COPY
Other versions: 7.31 | 7.40 | 7.54
Obsolete Syntax
ASSIGN LOCAL COPY OF { {[INITIAL] mem_area}
| {INITIAL LINE OF {itab|(itab_name)}} | {MAIN TABLE FIELD (name)} }
TO <fs> casting_spec.
Extras
2. ... MAIN TABLE FIELD (name)
3. ... casting_spec
Effect
Obsolete creation of a local data object. This variant of the ASSIGN statement can only be used in
subroutines and
funktion modules. The
field symbol <fs> must be declared locally in the procedure.
Like the normal statement ASSIGN,
the statement ASSIGN LOCAL COPY assigns a memory area mem_area
to the field symbol <fs>. In contrast to the normal statement ASSIGN,
the field symbol does not reference the memory area specified in mem_area after the successful assignment. Instead, an
anonymous data object
is created in the local data area of the procedure. After the successful execution of the statement, the field symbol points to the new data object. The new data object is treated as follows:
-
The size of the memory area of the new data object conforms to either the data in
mem_areaor the line typeof an internal table ifLINE OFis specified. The internal table can be specified directly asitabor as the content of a flat character-type fielditab_name. -
The data type with which the newly created data object is to be handled conforms to the data in
casting_specas is the case when using the normalASSIGN. -
The initial content of the new data object is copied from the memory area specified in
mem_areawhen specifyingmem_areawithout the additionINITIAL. Otherwise it is initialized according to type.
Limitiation of the memory area range_spec,
which can occur in the normal ASSIGN statement implicitly and explicitly,
occurs only implicitly in accordance with the rules that also apply to the normal ASSIGN.
Note
The creation of a local data object using the statement ASSIGN LOCAL COPY
is replaced by the statement CREATE DATA with subsequent deferencing in the normal ASSIGN statement.
Addition 1
... mem_area
Syntax of mem_area
... { dobj[+off][(len)]
| (name)
| oref->(attr_name)
| {class|(class_name)}=>{attr|(attr_name)}
| dref->* } ...
Effect
The specifications in mem_area are a subset of the
specifications in the normal ASSIGN statement. They have the same function except for the following restrictions:
-
If the addition
INITIALis used beforemem_area, the data objectnamemust be character-like and flat. -
If the addition
INITIALis used beforemem_area, the data objectdrefcannot be typed generically when using the dereferencing operator->*.
Addition 2
... MAIN TABLE FIELD (name)
This addition is for internal use only. It must not be used in application programs.
Effect
This addition is a special form of the specification of the memory area mem_area
that can only be used in this variant ofthe ASSIGN statement. It has the
same function as the statement TABLE
FIELD (name) of the normal ASSIGN with the exception that the search area is restricted to the current
main program group.
Addition 3
... casting_spec
Effect
The specification of casting_spec corresponds to that of the normal
ASSIGN with the limitation that if the addition INITIAL
is used before mem_area and an internal tables is specified, no explicit
specifications can be made. This means, the field symbol copies the data type of the data object in mem_area or the line type of the internal table.
Example
A typical use of the statement ASSIGN LOCAL COPY was the creation of a local copy of a global data object.
DATA g_dobj TYPE i.
...
CLEAR g_dobj.
PERFORM subroutine1.
...
FORM subroutine1.
FIELD-SYMBOLS <l_dobj> TYPE ANY.
ASSIGN LOCAL COPY OF g_dobj TO <l_dobj>.
<l_dobj> = <l_dobj> + 1.
WRITE: / g_dobj, <l_dobj>.
ENDFORM.
The following subroutine shows how the same functions can be universally implemented with a data reference.
DATA g_dobj TYPE i.
...
CLEAR g_dobj.
PERFORM subroutine2.
...
FORM subroutine2.
DATA dref TYPE REF TO data.
FIELD-SYMBOLS <l_dobj> TYPE ANY.
CREATE DATA dref LIKE g_dobj.
ASSIGN dref->* TO <l_dobj>.
<l_dobj> = g_dobj.
<l_dobj> = <l_dobj> + 1.
WRITE: / g_dobj, <l_dobj>.
ENDFORM.