SELECT (選択グループの始め)

自由形式構文 SELECT
コード 演算項目 1 演算項目 2 結果フィールド 標識
SELECT            
選択グループは、一連の複数の代替命令の中から 1 つを条件付きで処理しま す。 グループは次のものから構成されます。
  • SELECT ステートメント
  • ゼロまたはそれ以上の WHENxx または WHEN グループ
  • 任意指定の OTHER グループ
  • ENDSL または END ステートメント

SELECT 命令の後で、最初に満たされた WHENxx 条件の後のステートメント に制御が渡されます。 その後で、次の WHENxx 命令までのすべてのステートメントが実行されます。 ENDSL ステートメントに (WHENxx が 1 つしか実行されない場合) 制御が渡され ます。 WHENxx 条件が満たされないで、OTHER 命令が指定されている場合には、OTHER 命令の後のステートメントに制御が渡されます。 WHENxx 条件が満たされないで、OTHER 命令が指定されていない場合には、選択 グループの ENDSL 命令の後のステートメントに制御が渡されます。

SELECT 命令では、条件付け標識を使用することができます。 条件付け標識が満たされない場合には、選択グループの ENDSL 命令の後のステ ートメントに即時に制御が渡されます。 WHENxx、WHEN、OTHER、および ENDSL 命令個々では、条件付け標識を使用する ことはできません。

選択グループは演算の中の任意の場所に指定することができます。 IF、DO、 またはその他の選択グループの中でネストすることもできます。 IF および DO グループは選択グループの中でネストすることができます。

SELECT 命令が選択グループの中に指定されている場合には、 WHENxx および OTHER 命令は、ENDSL が指定されるまでその新しい選択グループに適用されます。

詳細については、構造化プログラミング命令を参照してください。

図 1. SELECT 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 * In the following example, if X equals 1, do the operations in
 * sequence 1 (note that no END operation is needed before the
 * next WHENxx); if X does NOT equal 1, and if Y=2 and X<10, do the
 * operations in sequence 2.  If neither condition is true, do
 * the operations in sequence 3.
 *
C                   SELECT
C                   WHEN      X = 1
C                   Z-ADD     A             B
C                   MOVE      C             D
 *  Sequence 1
C                   :
C                   WHEN      ((Y = 2) AND (X < 10))
 *  Sequence 2
C                   :
C                   OTHER
 *  Sequence 3
C                   :
C                   ENDSL
 *
 * The following example shows a select group with conditioning
 * indicators.  After the CHAIN operation, if indicator 10 is on,
 * then control passes to the ADD operation.  If indicator 10 is
 * off, then the select group is processed.
 *
C     KEY           CHAIN     FILE                               10
C  N10              SELECT
C                   WHEN      X = 1
 *  Sequence 1
C                   :
C                   WHEN      Y = 2
 *  Sequence 2
C                   :
C                   ENDSL
C                   ADD       1              N