CASE
Enables conditional execution of commands.
Syntax
CASE
WHEN expression
commands1
[OTHERWISE
commands2]
ENDCASE
Parameters
expression | A logical expression (using conditional or Boolean operators). |
commands1 | Commands that are executed if expression is logically true. |
commands2 | Commands that are executed if expression is logically false. |
Comments
A CASE command must always have a corresponding ENDCASE. Any number of WHEN clauses can appear between CASE and ENDCASE.
The WHEN phrases between CASE and ENDCASE are evaluated in order. Execution control transfers to the commands associated with the first WHEN clause whose expression is determined to be logically true. If none of the WHEN phrases contain an expression that evaluates to “true”, the commands associated with OTHERWISE (if used) are executed. Execution then resumes at the first command following ENDCASE.
If a WHEN expression includes fields from the current set, then the expression uses the values found in the current member of the current set.
If a BYE, RETURN, STOP, or TRANSFORM command exits a procedure in the middle of a CASE structure, the “open” CASE command is automatically closed. Also, if the end of the current procedure is reached before a necessary ENDCASE is encountered, the “open” CASE command is closed.
If the ENDCASE is missing, all subsequent commands in the current procedure are treated as part of the CASE structure.
Example
If the value for salary is neither less than 20,000, nor between 20,00 and 30,000, the first and second set of commands are skipped, and the third set of commands executed.
case
when salary < 20000
… first set of commands …
when Salary between 20000 and 20000
… second set of commands …
otherwise
… third set of commands …
endcase
The following program fragment illustrates how WHEN conditions in a CASE command can handle an application user’s choice of accelerator keys in an application. Depending on the key pressed by the application user, a particular procedure is executed.
form display input
case
when Event.EventName = “F3”
return
when Event.EventName = “F1”
AddNewRecord ()
when Event.EventName = “F2”
ChangeRecord ()
when Event.EventName = “F4”
DeleteRecord()
otherwise
GiveHelp ()
endcase