ABAP Keyword Documentation → ABAP − Reference → Processing Internal Data → Assignments → Lossless Assignments → Lossless Assignments - Rules → Checking Elementary Data Objects
Valid Values for Lossless Assignments
When a lossless conversion of an elementary argument of the operator
EXACT
to an incompatible data type is performed, the argument must represent a value that is valid in the tables below (and according to its data type):
Other versions: 7.31 | 7.40 | 7.54
Numeric Arguments
Argument | Valid Values |
---|---|
i , int8 , (b , s ) |
All content is valid. |
decfloat16 , decfloat34 |
All values resulting from assignments and calculations in ABAP are valid. The special values thatindicate infinity or invalid numbers are invalid. Invalid values raise an exception from the class CX_SY_CONVERSION_NO_NUMBER. |
p |
All values resulting from assignments and calculations in ABAP are valid. If, however, the typehas more decimal places than available places, this type is always invalid. (This means that the lasthalf byte can contain only the hexadecimal values "A", "C", "E", or "F", for a positive sign, or "B"or"D" for a negative sign. The remaining half bytes can contain only the hexadecimal values "0" to "9".)If, however, the type has more decimal places than available places, this type is always invalid. Invalid values raise an exception from the class CX_SY_CONVERSION_NO_NUMBER. |
f |
Integers with a maximum of 15 digits. |
Note
Decimal numbers with decimal places cannot generally be represented precisely by binary floating point
numbers of type f
. The operator EXACT
therefore restricts the valid value range to integers with a maximum of 15 places.
Example
The second lossless assignment raises an exception, caused by the attempt to convert a number with decimal places.
DATA arg TYPE f.
arg = 123.
DATA(result1) = EXACT i( arg ).
arg = '123.456'.
DATA(result2) = EXACT i( arg ).
Character-Like Arguments
Argument | Valid Values |
---|---|
c , string |
All content is valid. No check is made to determine whether a byte or string of bytes contains valid characters for the current code page. |
n |
The argument can contain the digits "0" to "9" only. Invalid values raise an exception from the class CX_SY_CONVERSION_NO_NUMBER. |
Example
The second lossless assignment raises an exception because numtext
does not contain a valid value.
DATA numtext TYPE n LENGTH 6.
DATA time TYPE t.
numtext = time = '115500'.
DATA(result1) = EXACT string( numtext ).
numtext = time = '1155__'.
DATA(result2) = EXACT string( numtext ).
Byte-Like Arguments
Argument | Valid Values |
---|---|
x , xstring |
All content is valid. |
Example
The lossless assignment does not raise an exception for any of the randomly generated byte strings.
DATA hex TYPE x LENGTH 1.
DATA(rnd) = cl_abap_random_int=>create(
seed = CONV i( sy-uzeit ) min = 0 max = 1 ).
DO 8 TIMES.
SET BIT sy-index OF hex TO rnd->get_next( ).
ENDDO.
DATA(result) = EXACT string( hex ).
Date fields, time fields, and time stamp fields as arguments
Argument | Valid Values |
---|---|
d |
The argument must contain a valid date in the format "yyyymmdd", for which the following valuesare permitted: "yyyy" (year): 0001 to 9999, "mm" (month): 01 to 12, "dd" (day): 01 to 31. In addition, the initial value "00000000" is also a valid date. The value "00010101" is only a valid date inABAP SQL and nowhere elsein ABAP. The smallest valid value that corresponds to a day is "00010102". The values "15821005" to"15821014" are also invalid. This is because of the switch from the Julian to the Gregorian calendar,where 04.10.1582 is followed directly by 15.10.1582. Invalid values raise an exception from the class CX_SY_CONVERSION_NO_DATE. |
t |
The argument must contain a valid time in the format "hhmmss", for which the following values arepermitted: "hh" (hours): 00 to 23, "mm" (minutes): 01 to 59, "ss" (seconds): 01 to 59. Invalid values raise an exception from the class CX_SY_CONVERSION_NO_TIME. |
utclong |
The argument must contain a value from the value range for utclong , meaning a valid time stamp, or be initial. Invalid values raise an exception from the class CX_SY_CONVERSION_NO_DATE_TIME. |
Notes
- The values that the operator
EXACT
permits for date fields of typed
are different from those defined by the value range. The initial value "00000000", which does not lie within the value range and is normally considered an invalid date, is considered a valid date here, whereas the value "00010101", which does lie within the value range, is considered invalid. Only in ABAP SQL is the value "00010101" also accepted as a valid date and treated like the initial value "00000000" in operand positions for which values must satisfy the rules for lossless assignments.
- The rule for time stamps of data type
utclong
is no different from the standard conversion rule.
Example
The second lossless assignment raises an exception because date
does not contain a valid value.
DATA date TYPE d.
date = '20160729'.
DATA(result1) = EXACT i( date ).
date = '201607__'.
DATA(result2) = EXACT i( date ).