Format
{ value-expr }
{ IF cond-expr THEN value-expr [ ELSE value-expr ] }
COMPUTED BY { NULLIF ( value-expr, value-expr ) }
{ }
{ COALESCE ( value-expr [ , value-expr ] ... ) }
1 – Parameters
1.1 – value-expr
Specifies an expression a product can use to calculate a field's
value. See Expressions for more information on value expressions.
1.2 – cond-expr
Specifies an expression that represents the relationship between
two value expressions. See Expressions for more information on
conditional expressions.
2 – Description
The COMPUTED BY field property evaluates an expression, allowing
a product that uses CDO to determine the value of a field at
runtime.
The expression must be a valid CDO expression. CDO checks the
expression for correct syntax and field references.
The product must be able to interpret the CDO expression.
When you specify a conditional expression in the COMPUTED BY
field property, you can define a field that is equivalent to a
COBOL level 88 condition. The computed by expression must be in
one of the following forms:
o if [name EQ literal1] THEN 1 ELSE 0
o if [(name GE literal1 AND name LE literal2) OR (name GE
literal3 AND name LE literal4)]... THEN 1 ELSE 0
Use NULL IF to substitute NULL when two value expressions are
equal.
Use COALESCE to return the first non-NULL value from a series of
value expressions.
There is a limited subset of valid COMPUTED BY fields that are
acceptable in COBOL syntax for inclusion through the COPY FROM
DICTIONARY clause. They have the following format:
COMPUTED BY IF expression THEN 1 ELSE 0
Where expression is:
{ }
{ { number } }
{ fld-name = { } }
{ { string } }
{ } OR ...
{ { number } { number } }
{ fld-name GE { } AND fld-name LE { } }
{ { string } { string } }
{ }
For example, the following COMPUTED BY fields are defined:
DEFINE FIELD Y_TRUE
COMPUTED BY IF (Y = "TRUE") THEN 1 ELSE 0.
DEFINE FIELD Z_NULL
COMPUTED BY IF (Z = 0) THEN 1 ELSE 0.
DEFINE FIELD W_ALPHABETIC COMPUTED BY
IF ((W GE "A") AND (W LE "Z")) OR ((W GE "a") AND (W LE "z"))
THEN 1 ELSE 0.
DEFINE FIELD X_3_DIGITS
COMPUTED BY IF (X GE 100) AND (X LE 999) THEN 1 ELSE 0.
They are translated as the following COBOL level 88 conditions:
02 Y ...
88 Y_TRUE VALUE IS "TRUE".
02 Z ...
88 Z_NULL VALUE IS 0.
02 W ...
88 W_ALPHABETIC VALUES ARE "A" THRU "Z", "a" THRU "z".
02 X ...
88 X_3_DIGITS VALUES ARE 100 THRU 999.
RESTRICTION
The COMPUTED BY field property can reference only one field.
The fld-name parameter must be the same field name in all
instances. When included in COBOL, the COMPUTED BY field
will be translated as a level 88 condition associated with
the field that was referenced.
3 – Examples
1.CDO> DEFINE FIELD SUBTOTAL_PRICE
cont> COMPUTED BY UNIT_PRICE * QUANTITY.
In this example, the DEFINE FIELD command includes the COMPUTED
BY property to calculate a value for the SUBTOTAL_PRICE field
element. The value is computed by multiplying UNIT_PRICE by
QUANTITY.
2.CDO> DEFINE FIELD TOTAL_PRICE
cont> COMPUTED BY UNIT_PRICE (3) * 10.
In this example, the DEFINE FIELD command includes a COMPUTED
BY property to calculate a value for the TOTAL_PRICE field
element. The value is calculated by multiplying the value in
the third instance of the UNIT_PRICE field element by 10.
3.CDO> CHANGE FIELD TOTAL_PRICE
cont> NOCOMPUTED BY.
In this example, the CHANGE FIELD command includes the
NOCOMPUTED BY keywords to remove the COMPUTED BY property from
the TOTAL_PRICE field element.
4.CDO> DEFINE FIELD C
cont> DATATYPE SIGNED WORD.
CDO> DEFINE FIELD C_ONE
cont> COMPUTED BY IF C EQ 1 THEN 1 ELSE 0.
CDO> DEFINE FIELD C_FIVE_TEN
cont> NAME FOR COBOL IS C_5_10
cont> COMPUTED BY IF C GE 5 AND C LE 10 THEN 1 ELSE 0.
CDO> DEFINE FIELD C_OTHER
cont> COMPUTED BY
cont> IF (C GE 2 AND C LE 4)
cont> OR (C GE 11 AND C LE 20)
cont> THEN 1 ELSE 0.
CDO> DEFINE RECORD COB88.
cont> C.
cont> C_ONE.
cont> C_FIVE_TEN.
cont> C_OTHER.
cont> END RECORD.
In this example, the DEFINE FIELD commands include COMPUTED BY
properties that contain conditional and value expressions.
These expressions are related to the value of the C field
element, as follows:
o The C_ONE field element takes the value of one (if C
evaluates to one) or zero.
o The C_FIVE_TEN field element takes the value of one (if C
evaluates to a value between five and ten) or zero.
o The C_OTHER field element takes the value of one (if C
evaluates to a value between two and four or if C evaluates
to a value between eleven and twenty) or zero.
5.01 COB88.
03 C USAGE IS COMP PIC 9(4).
88 C_ONE VALUE 1.
88 C_FIVE_TEN VALUES ARE 5 THRU 10.
88 C_OTHER VALUES ARE 2 THRU 4
11 THRU 20.
This example shows COBOL syntax for the record containing level
88 definitions.