ABAP Keyword Documentation →  ABAP − Reference →  Program Flow Logic →  Control Structures →  Branches → 

CASE  Syntax Diagram

Short Reference

Syntax

CASE operand.
  [WHEN operand1 [OR operand2 [OR operand3 [...]]].
    [statement_block1]]
  ...
  [WHEN OTHERS.
    [statement_blockn]]
ENDCASE.

Effect

Case distinction. These statements define a control structure that can contain multiple statement blocks statement_block1, ..., statement_blockn, of which no more than one is executed depending on the value of the operand operand.

Starting with the first WHEN statement, the content of the operand in operand is compared with the content of one of the operands operand1, operand2, ... from the top down. The statement block is executed after the first identical instance is found. If no matches are found, the statement block is executed after the statement WHEN OTHERS.

If the end of the executed statement block is reached or no statement block is executed, processing continues after ENDCASE.

The contents are compared as illustrated in the following logical expression:

operand = operand1 [OR operand = operand2
                   [OR operand = operand3 [...]]]

For the comparison, the comparison rules for comparisons between any operands apply, depending on the data types of the operands involved.

Notes

Example

Branches the program flow depending on the function code in system field sy-ucomm.

CASE sy-ucomm.
  WHEN 'BACK'.
    LEAVE TO SCREEN 100.
  WHEN 'CANCEL'.
    LEAVE SCREEN.
  WHEN 'EXIT'.
    LEAVE PROGRAM.
  WHEN OTHERS.
    MESSAGE '...' TYPE 'E'.
ENDCASE.

Example

This example demonstrates that the calculation type of an arithmetic expression after CASE is determined only by its operands. The calculation type after the first CASE statement is i and the result of the calculation is 0. The comparison with the value 0 after WHEN is true regardless of its data type. The calculation type of the comparison after IF is decfloat34, however, and the result is false. To force a specific calculation type after CASE, a further operand can be added as shown in the second CASE statement. This operand is not involved in the calculation.

DATA:
  inum1 TYPE i VALUE 1,
  inum2 TYPE i VALUE 3,
  decf  TYPE decfloat34 VALUE 0.

CASE  inum1 / inum2.
  WHEN decf.
    cl_demo_output=>write_text( 'In CASE equal' ).
ENDCASE.

IF decf <> inum1 / inum2.
  cl_demo_output=>write_text( 'In IF not equal' ).
ENDIF.

CASE  inum1 / inum2 + decf.
  WHEN decf.
    cl_demo_output=>write_text( 'In CASE equal' ).
  WHEN OTHERS.
    cl_demo_output=>write_text( 'In CASE not equal' ).
ENDCASE.

cl_demo_output=>display( ).




Continue
WHEN
ENDCASE