Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 言語解説書


SET ステートメント

SET ステートメントは、次に示す処理のいずれかを実行するために使用されます。

指標名は、 OCCURS 節の INDEXED BY 句を通して付与されたテーブルと関連付けられています。 プログラムでさらに定義されることはありません。

SET ステートメントの中で、 送り出しフィールドと受け取りフィールドがそれらのストレージの一部を共用している場合 (つまり、 オペランドのオーバーラップがあると)、SET ステートメントを実行した結果は未定義のままです。

フォーマット 1: 基本的なテーブル処理のための SET

この形式の SET ステートメントを実行すると、受け取りフィールドの現行値が、 送り出しフィールドの値を変換した値で置き換えられます。

構文図を読む構文図をスキップする
フォーマット 1: 基本的なテーブル処理のための SET ステートメント

        .--------------.                     
        V              |                     
>>-SET----+-指標名-1--+-+--TO--+-指標名-2--+---------------------><
          '-ID-1-----'        +-ID-2-----+   
                              '-整数-1----'   

指標名-1
受け取りフィールド。

OCCURS 節の INDEXED BY 句で指定した指標に名前を付ける必要があります。

ID-1
受け取りフィールド。

指標データ項目または基本数字整数項目のいずれかを指定する必要があります。 受け取りフィールドをウィンドウ表示日付フィールドにすることはできません。

指標名-2
送り出しフィールド。

OCCURS 節の INDEXED BY 句で指定した指標に名前を付ける必要があります。 SET ステートメントが実行される前の指標値は、関連付けられたテーブルのオカレンス項目数に対応する必要があります。

ID-2
送り出しフィールド。

指標データ項目または基本数字整数項目のいずれかを指定する必要があります。 送り出しフィールドをウィンドウ表示日付フィールドにすることはできません。

整数-1
送り出しフィールド。

これは、正の整数である必要があります。

以下の表は、フォーマット 1 の SET ステートメントにおける 送り出しフィールドと受け取りフィールドの有効な組み合わせを示しています。

表 1. フォーマット-1 の SET ステートメントの送り出しフィールドと受け取りフィールド
送り出しフィールド

指標名
受け取りフィールド

指標データ項目受け取りフィールド 整数データ項目受け取りフィールド
指標名* 有効 有効** 有効
指標データ項目* 有効** 有効** 無効
整数データ項目 有効 無効 無効
整数リテラル 有効 無効 無効
*指標名とは、OCCURS 節の INDEXED BY 句で指定した指標を指します。指標データ項目は、 USAGE IS INDEX 節を使用して定義されます。

**変換は何も行われません。

受け取りフィールドは、指定されている順に左から右へと処理されます。 ID-1 に関連付けられた添え字付けまたは指標付けがある場合には、受け取りフィールドが処理される直前に評価されます。

送り出しフィールドで使用される値は、 SET ステートメントの実行開始時の値です。

SEARCH ステートメントまたは PERFORM ステートメント実行後の指標の値は未 定義となることがあります。したがって、他のテーブル処理操作を行う前に、フォ ーマット-1 SET ステートメントでそのような指標を再初期設定してください。

指標名-2 が、OCCURS DEPENDING ON 節を含む従属項目を持つテーブルに対するものである場合には、 未定義の値が ID-1 に受け取られる可能性があります。

複合 OCCURS DEPENDING ON の詳細については、Enterprise COBOL プログラミング・ガイド」を参照してください。

フォーマット 2: 指標調整用の SET

この形式の SET ステートメントを実行すると、受け取り指標値が送り出しフィール ド内の値に対応する値だけ増加 (UP BY) または減少 (DOWN BY) します。

構文図を読む構文図をスキップする
フォーマット 2: 指標調整用の SET ステートメント

        .----------.                            
        V          |                            
>>-SET----指標名-3-+--+-UP BY---+--+-ID-3---+------------------><
                      '-DOWN BY-'  '-整数-2-'   

受け取りフィールド指標名-3 により指定された指標です。指標値は、SET ステートメント実行前も実行後も、関連するテーブル内のオカレンス項目数に対応する必要があります。

送り出しフィールド は、ID-3 または整数-2 として定義することができます。そして、ID-3 は基本整数データ項目、整数-2 はゼロ以外の整数である必要があります。ID-3 をウィンドウ表示日付フィールドにすることはできません。

フォーマット 2 の SET ステートメントが実行されると、受け取りフィールドの内容が、ID-3 または整数-2 の値で表される発生数に対応する値だけ、 増加 (UP BY) または減少 (DOWN BY) します。受け取りフィールドは、指定されている順に左から右へと処理されます。 SET ステートメントの実行開始時の増加するフィールド値または減少するフィールド値が、 すべての受け取りフィールドにおいて使用されます。

指標名-3 が、 OCCURS DEPENDING ON 節を含む従属項目を持つテーブルに対するものである場合、 また ODO のオブジェクトが、フォーマット 2 の SET ステートメントの実行前に変更される場合、指標名-3 には、関連するテーブルの発生数に相当する値が入りません。

複合 OCCURS DEPENDING ON の詳細については、Enterprise COBOL プログラミング・ガイド」を参照してください。

フォーマット 3: 外部スイッチ用の SET

この形式の SET ステートメントが実行されると、指定された簡略名に関連する外部 スイッチの各状況が、ON または OFF に切り替わります。

構文図を読む構文図をスキップする
フォーマット 3: 外部スイッチ用の SET ステートメント

        .---------------------------.   
        | .----------.              |   
        V V          |              |   
>>-SET------簡略名-1-+--TO--+-ON--+-+--------------------------><
                            '-OFF-'     

簡略名-1
外部スイッチと関連付けられている必要があり、その状況は変更可能です。

フォーマット 4: 条件名用の SET

この形式の SET ステートメントを実行すると、条件名に関連する値が VALUE 節の規則に従って条件変数の中に入れられます。

構文図を読む構文図をスキップする
フォーマット 4: 条件名用の SET ステートメント

        .----------.            
        V          |            
>>-SET----条件名-1-+--TO TRUE----------------------------------><

条件名-1
条件変数と関連付けられている必要があります。

条件名-1 の VALUE 節の中で複数のリテラルが指定されている場合には、 関連付けられた条件変数は、最初のリテラルに等しく設定されます。

複数の条件名を指定すると、 その実行結果は、それらの条件名が SET ステートメントの中で指定されている順に、 各条件名に関して個別の SET ステートメントを記述したものと同じになります。

フォーマット 5: USAGE IS POINTER データ項目用の SET

この形式の SET ステートメントを実行すると、受け取りフィールドの現行値は、送 り出しフィールドの中にあるアドレス値によって置き換えられます。

構文図を読む構文図をスキップする
フォーマット 5: データ・ポインター用の SET ステートメント

        .----------------------.                             
        V                      |                             
>>-SET----+-ID-4-------------+-+--TO--+-ID-6-------------+-----><
          '-ADDRESS OF--ID-5-'        +-ADDRESS OF--ID-7-+   
                                      +-NULL-------------+   
                                      '-NULLS------------'   

ID-4
受け取りフィールド。

USAGE IS POINTER として記述されている必要があります。

ADDRESS OF ID-5
受け取りフィールド。

ID-5 は、リンケージ・セクションの中に定義されたレベル 01 またはレベル 77 の項目である必要があります。これらの項目のアドレスは、TO 句の中に指定されたオペランドの値に設定されます。

ID-5 は、参照変更にすることはできません。

ID-6
送り出しフィールド。

USAGE IS POINTER として記述されている必要があります。

ADDRESS OF ID-7
送り出しフィールド。 ID-7 には、リンケージ・セクション、作業用ストレージ、セクション、またはローカル・ストレージ・セクション内の 66 または 88 を除いたレベルの項目を指定する必要があります。ADDRESS OF ID-7 には、ID の内容ではなく、 ID のアドレスを入れます。
NULLNULLS
送り出しフィールド。

受け取りフィールドが、無効なアドレスの値を含むように設定します。

以下の表は、フォーマット 5 の SET ステートメントにおける 送り出しフィールドと受け取りフィールドの有効な組み合わせを示しています。

表 2. フォーマット 5 の SET ステートメントの送り出しフィールドと受け取りフィールド
送り出しフィールド USAGE IS POINTER 受け取りフィールド

ADDRESS OF
受け取りフィールド

NULL/NULLS
受け取りフィールド

USAGE IS POINTER 有効 有効 無効
ADDRESS OF 有効 有効 無効
NULL/NULLS 有効 有効 無効

フォーマット 6: プロシージャー・ポインターおよび関数ポインタ ーのデータ項目用の SET

このフォーマットの SET ステートメントを実行すると、受け取りフィールドの現行 値は、送り出しフィールドで指定されたアドレス値によって置き換えられます。

実行時、関数ポインターとプロシージャー・ポインターでは、COBOL プログラムの 1 次入り口点のアドレス、 COBOL プログラムの代替入り口点のアドレス、または COBOL 以外のプログラムの入り口点のアドレスを参照できます。 これらは NULL の場合もあります。

COBOL で C 関数と相互協調処理を行う場合は、プロシージャー・ポインターよりも関数ポインターのほうが簡単に使用できます。

構文図を読む構文図をスキップする
フォーマット 6: プロシージャー・ポインターおよび関数ポインター用の SET ステートメント

        .----------------------------------------------.   
        V                                              |   
>>-SET----+-プロシージャー・ポインター・データ項目-1-+-+-------->
          '-関数ポインター・データ項目-1-------------'     

>--TO--+-プロシージャー・ポインター・データ項目-2-+------------><
       +-関数ポインター・データ項目-2-------------+   
       +-ENTRY--+-ID-8-------+--------------------+   
       |        '-リテラル-1-'                    |   
       +-NULL-------------------------------------+   
       +-NULLS------------------------------------+   
       '-ポインター・データ項目-3-----------------'   

プロシージャー・ポインター・データ項目-1プロシージャー・ポインター・データ項目-2
USAGE IS PROCEDURE-POINTER として記述されている必要があります。 プロシージャー・ポインター・データ項目-1 は受け取りフィールド、プロシージャー・ポインター・データ項目-2 は送り出しフィールドです。
関数ポインター・データ項目-1関数ポインター・データ項目-2
USAGE IS FUNCTION-POINTER として記述されている必要があります。 関数ポインター・データ項目-1 は受け取りフィールド、関数ポインター・データ項目-2 は送り出しフィールドです。
ID-8
その値をプログラム名にできるように、英字または英数字として定義する必要があります。詳細については、PROGRAM-ID 段落を参照してください。COBOL 以外のプログラムの入り口点の場合、 ID-8@、#、および $ の各文字を含めることができます。
リテラル-1
英数字リテラルでなければならず、 またプログラム名形成の規則に適合している必要があります。 形成規則の詳細は、PROGRAM-ID 段落のプログラム名の説明を参照してください。

ID-8 またはリテラル-1 は、 以下に示す種類の入り口点の 1 つを参照する必要があります。

  • PROGRAM-ID 段落によって定義されている COBOL プログラムの 1 次入り口点。PROGRAM-ID は、コンパイル単位の一番外側のプログラムを参照する必要があります。 ネストされたプログラムは参照してはなりません。
  • COBOL ENTRY ステートメントによって COBOL プログラムのために定義されている代替となる入り口点。
  • 非 COBOL プログラムの入り口点。

SET...TO ENTRY ステートメントが参照するプログラム名は、 PGMNAME コンパイラー・オプションの影響を受けることがあります。 詳細については、Enterprise COBOL プログラミング・ガイド」を参照してください。

NULLNULLS
受け取りフィールドが、無効なアドレスの値を含むように設定します。
ポインター・データ項目-3
USAGE POINTER で定義される必要があります。 ポインター・データ項目-3 を非 COBOL プログラムで設定して、 有効なプログラム入り口点を指すようにする必要があります。

COBOL/C インターオペラビリティーの例

以下の例では、 関数ポインターをサービスに戻す C 関数への COBOL CALL を説明しており、 サービスへの COBOL CALL が続きます。

IDENTIFICATION DIVISION.
PROGRAM-ID DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 FP USAGE FUNCTION-POINTER.
PROCEDURE DIVISION.
    CALL "c-function" RETURNING FP.
    CALL FP.

フォーマット 7: USAGE OBJECT REFERENCE データ項目用の SET

このフォーマットの SET ステートメントを実行すると、受け取り項目の値は送り出 し項目の値によって置き換えられます。

構文図を読む構文図をスキップする
フォーマット 7: オブジェクト・リファレンス用の SET ステートメント

>>-SET--オブジェクト・リファレンス ID-1------------------------->

>--TO--+-オブジェクト・リファレンス ID-2-+---------------------><
       +-NULL----------------------------+   
       '-SELF----------------------------'   

オブジェクト・リファレンス ID-1 およびオブジェクト・リファレンス ID-2 として定義する必要があります。オブジェクト・リファレンス ID-1 は受け取り項目、オブジェクト・リファレンス ID-2 は送り出し項目です。オブジェクト・リファレンス ID-1 が特定クラスのオブジェクト・リファレンスとして定義される (「USAGE OBJECT REFERENCE クラス名」として定義される) 場合、オブジェクト・リファ レンス ID-2 は、同じクラスの、またはそのクラスから派生するオブジェクト・リ ファレンスである必要があります。

形象定数 NULL が指定される場合、受け取りオブジェクト・リファレンス ID-1 は NULL 値に設定されます。

SELF が指定される場合、 SET ステートメントが、メソッドの手続き部に表示されなければなりません。 オブジェクト・リファレンス ID-1 は、現在実行中のメソッドが呼び出されたオブジェクトを参照するように設定されます。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)