DEFINE ORDINAL[1]

Attention: This topic applies to a feature that is in Early Adopter Program (EAP) release status. We intend to provide the finalized feature in a future release. Please contact Micro Focus Customer Care if you require further clarification.

Purpose

Represents a set of named ordered values via a named type.

Syntax

DEFINE ORDINAL ordinal_type_name {member_name [VALUE(integer)]
  [,...]} [{PRECISION | PREC}] (integer) [SIGNED | UNSIGNED]

Parameters

ordinal_type_name
The named type that represents the set of ordinal values. Use this name only in DECLARE statements with the ORDINAL attribute. When used elsewhere, the name is treated like any other non-ordinal name.
member_name
The name of a member within the set of ordinal values.
VALUE
The value of a particular member within the set of ordinal values. When omitted for the first member, the default value used is 0 (zero). When omitted for any other member, the value used is that of the next greater integer.

The value assigned or assumed for the VALUE attribute must be a signed or unsigned integer, and may be specified as an XN constant. It must strictly increase.

PRECISION | PREC
Specifies the precision for the ordinal value. The maximum precision allowed is the same as that of FIXED BINARY data items. However, the actual maximum precision applied is 31 for SIGNED, and 32 for UNSIGNED. For UNSIGNED, the maximum value allowed is 2147483647. If omitted, the range of ordinal values determines the precision.
SIGNED
Indicates that ordinal values can be negative. When omitted, SIGNED is applied when any ordinal values within the range are negative.
UNSIGNED
Indicates that ordinal values cannot be negative.

Examples

Example 1
define ordinal Subjects (Mathematics,   /* 0, starting value is zero when VALUE not specified */
                         Literature,    /* 1 */
                         Science,       /* 2 */
                         History);      /* 3 */

define ordinal Math (Algebra VALUE(101),  /* 101*/
                     Geometry,            /* 102 */
                     Calculus VALUE(301)); /* 301 */
Example 2
define ordinal Subjects (Arithmetic,    /* 0, starting value is zero when VALUE not specified */
                         Literature,    /* 1 */
                         Science,       /* 2 */
                         History);      /* 3 */

dcl x ordinal Subjects;

   do x = first(:Subjects:) upthru last(:Subjects:);
       put skip list (ordinalname(x));
   end;

Prints:

MATHEMATICS
LITERATURE
SCIENCE
HISTORY
Example 3
Declare subject  ORDINAL Subjects;

Declare course TYPE Math;   /* ORDINAL & TYPE keywords are interchangeable */

     subject = Mathematics;
     course = Calculus;

     if subject = Mathematics then
         if course = Calculus then
             put skip list ('At the upper Limit!');


     subject = Algebra; /* illegal assignment, mismatched ordinal types */

     if subject = course then /* illegal comparison, mismatched ordinal types */
          put skip;;

Restrictions

Unsupported type functions include BIND, CAST, NEW, RESPEC, SIZE, and VALUE.