Skip to content

ABAP Keyword Documentation →  ABAP - Reference →  Processing Internal Data →  Assignments →  Assigning References →  Setting Field Symbols →  ASSIGN 

ASSIGN - casting_spec

Short Reference

Other versions: 7.31 | 7.40 | 7.54

Syntax


... { } 
  | { CASTING { { }
             | {TYPE type|(name)}
              | {LIKE dobj}
              | {[TYPE p] DECIMALS dec}
              | {TYPE HANDLE handle} } }
  | { obsolete_casting } ...

Alternatives

1. ... { }
2. ... CASTING ...

Effect

If specified, casting_spec defines the data type used to handled the memory area mem_area assigned to the field symbol when a statement is given the field symbol in an operand position. Either the addition CASTING can be specified or nothing at all. Outside of classes, the obsolete variants obsolete_casting are also possible.

In assignments of table expressions, the first alternative can be used without further additions.

Alternative 1

... { }

Effect

If nothing is specified for casting_spec, the field symbol is given the data type of the data object used in mem_area and the assigned memory area is handled accordingly. This data type must match the typing of the field symbol.

Alternative 2

... CASTING ...

Extras

1. ... { }
2. ... TYPE type|(name)

3. ... LIKE dobj

4. ... [TYPE p] DECIMALS dec

5. ... TYPE HANDLE handle

Effect

If the addition CASTING is used in casting_spec, the memory area is handled as if it had the type specified by CASTING. When specifying CASTING, the field symbol must not be typed with the obsolete addition STRUCTURE of the statement FIELD SYMBOLS.

Casting can either take place implicitly using the typing of the field symbol or explicitly using one of the additions TYPE, LIKE, or DECIMALS. In explicit castings, the field symbol cannot be specified in full; instead it must be specified generically.


Notes

  • If the data type specified by CASTING is deep, the deep components have to appear in the assigned memory area in exactly the same way in terms of type and position. In particular, this means that individual reference variables can be assigned to only one field symbol that is typed as a reference variable by the same static type.
  • The static check of the statement ASSIGN using the addition CASTING is done in such a way that all errors are identified for Unicode and non- Unicode systems and for all platforms, regardless of the system and the platform on which the check is run. A runtime check only checks the data against the current system or the current platform. These checks likewise always take place if the field symbol <fs> is typed with the obsolete addition STRUCTURE of the statement FIELD SYMBOLS.
  • If the addition CASTING is used, the result of the statement ASSIGN may be platform-dependent. The internal byte order of characters in Unicode systems can for example be platform-dependent, which becomes obvious during a cast to a byte-like data type.
  • The memory area mem_area must meet the alignment requirements of the data type specified by the casting. When flat elementary data types are specified, for example, the memory address mem_area must be divisible as follows:

  • Divisible by 2 for the character-like data types c, n, d, and t (in Unicode systems).

  • By 4 for the numeric data type i.

  • By 8 for the numeric data types f and decfloat16.

  • By 16 for the numeric data type decfloat34.

Addition 1

... { }

Effect

If the addition CASTING is specified without any further additions, the assigned memory area is cast to the type of the field symbol. The field symbol must be either fully typed, or typed with one of the generic predefined ABAP types c, n, p, or x.

Addition 2

... TYPE type|(name)

Effect

After TYPE, a data type type can be specified directly, or a character-like data object name in parentheses, which must contain the name of a data object in uppercase when the statement is executed. The assigned memory area is cast to the specified type. The data type specified after TYPE cannot be generic. The exceptions to this rule are the predefined ABAP types c, n, p and x. However, table categories cannot be specified, nor REF TO.

The field symbol <fs> can only be typed generically and not in full. The specified data type has to match the generic typing of the field symbol, meaning that castings are allowed to specialize the generic typing but not to make more general.

If a generic character-like type c or n is specified after TYPE, the length of the assigned memory area must be a multiple of the length of a character in the memory when the statement is executed.


Note

In obsolete non-Unicode programs, the length of the assigned memory area is not checked in the case of generic character-like types.


Example

In the following example, one of the two ASSIGN statements produces a runtime error, since the alignment requirement for the type c is not met. Which of the statements produces the runtime error is not generally defined and depends on the preceding declarations.

DATA hex        TYPE x LENGTH 10. 

FIELD-SYMBOLS <fs> TYPE any. 

ASSIGN hex+0(4) TO <fs> CASTING type c. 
ASSIGN hex+1(4) TO <fs> CASTING type c. 

Addition 3

... LIKE dobj

Effect

The following can be specified after LIKE:

  • A data object dobj based on the rules for TYPES ... LIKE. The assigned memory area is cast to the data type of the data object.
  • A generically typed field symbol.
  • If a memory area is assigned to the field symbol, the data type used to handle the memory area is the object of the cast.
  • If no memory area is assigned to the field symbol, a standard type produced by the following rules is used:

    any, c, clike, csequence, data, and simple produce c with length 1.

    decfloat produces decfloat34.

    n produces n with length 1.

    numeric and p produce p with length 8 and no decimal places.

    x and xsequence produce x of the length 1.

    Generic table types raise an exception of the class
    CX_SY_ASSIGN_CAST_ILLEGAL_CAST.
  • A generically typed formal parameter.
  • If an actual parameter is assigned to the formal parameter, the data type of this parameter is the object of the cast.
  • If no actual parameter is assigned to an optional formal parameter, its assigned standard type is used.

The field symbol <fs> can only be typed generically and not in full. The specified data type has to match the generic typing of the field symbol, meaning that castings are allowed to specialize the generic typing but not to make more general.


Notes

  • LIKE can be used to refer to the data objects in its own program, and also to the public attributes of global classes.
  • The standard type for generically typed field symbols specified after CASTING LIKE displays some differences to the standard type for generic field symbols and formal parameters (length 1 not 4 if any and data are used and no standard type for generic table types).
  • If a generically typed field symbol is specified after CASTING LIKE, a memory area should be assigned to it when the statement is executed.

Addition 4

... [TYPE p] DECIMALS dec

Effect

A numeric data object dec must be specified after DECIMALS. The assigned memory area is cast to the data type p, where the number of decimal places is determined by the content of dec. The number of decimal places must not exceed the number of decimal digits. TYPE does not need to be specified for DECIMALS. If TYPE is used, only the data type p (which is used anyway) can be specified.

The field symbol <fs> can only be typed generically and not in full. The specified data type has to match the generic typing of the field symbol, meaning that castings are allowed to specialize the generic typing but not to make more general.


Example

Calculating the quotient from the packed number pack and the field symbol <pack> demonstrates the effect of casting with the addition DECIMALS. Factors between 10 and 100,000,000 are determined. When using <pack> in operand positions, a different value is used than when using pack.

DATA output TYPE TABLE OF string WITH EMPTY KEY. 
DATA pack   TYPE p LENGTH 8 DECIMALS 0 VALUE '12345678'. 
FIELD-SYMBOLS <pack> TYPE p. 

DO 8 TIMES. 
  ASSIGN pack TO <pack> CASTING DECIMALS sy-index. 
  APPEND CONV string( pack / <pack> ) TO output. 
ENDDO. 
cl_demo_output=>display( output ). 

Addition 5

... TYPE HANDLE handle

Effect

After TYPE HANDLE, a reference variable handle of the static type of the CL_ABAP_DATADESCR class or its subclasses is specified and it points to a type description object of the RTTS. The assigned memory area is cast to the type described by the type description object.

The field symbol <fs> can only be typed generically and not in full. The specified data type has to match the generic typing of the field symbol, meaning that castings are allowed to specialize the generic typing but not to make more general.

The addition CASTING TYPE HANDLE cannot be used with the addition RANGE.


Note

The type description object may have been created using the RTTS methods on existing data objects, or using the definition of a new data type.

Continue

Casting Examples