SET ステートメントは、次に示す処理のいずれかを実行するために使用されます。
指標名は、 OCCURS 節の INDEXED BY 句を通して付与されたテーブルと関連付けられています。 プログラムでさらに定義されることはありません。
SET ステートメントの中で、 送り出しフィールドと受け取りフィールドがそれらのストレージの一部を共用している場合 (つまり、 オペランドのオーバーラップがあると)、SET ステートメントを実行した結果は未定義のままです。
この形式の SET ステートメントを実行すると、受け取りフィールドの現行値が、 送り出しフィールドの値を変換した値で置き換えられます。
フォーマット 1: 基本的なテーブル処理のための SET ステートメント .--------------. V | >>-SET----+-指標名-1--+-+--TO--+-指標名-2--+--------------------->< '-ID-1-----' +-ID-2-----+ '-整数-1----'
OCCURS 節の INDEXED BY 句で指定した指標に名前を付ける必要があります。
指標データ項目または基本数字整数項目のいずれかを指定する必要があります。 受け取りフィールドをウィンドウ表示日付フィールドにすることはできません。
OCCURS 節の INDEXED BY 句で指定した指標に名前を付ける必要があります。 SET ステートメントが実行される前の指標値は、関連付けられたテーブルのオカレンス項目数に対応する必要があります。
指標データ項目または基本数字整数項目のいずれかを指定する必要があります。 送り出しフィールドをウィンドウ表示日付フィールドにすることはできません。
これは、正の整数である必要があります。
以下の表は、フォーマット 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 プログラミング・ガイド」を参照してください。
この形式の 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 プログラミング・ガイド」を参照してください。
この形式の SET ステートメントを実行すると、条件名に関連する値が VALUE 節の規則に従って条件変数の中に入れられます。
フォーマット 4: 条件名用の SET ステートメント .----------. V | >>-SET----条件名-1-+--TO TRUE----------------------------------><
条件名-1 の VALUE 節の中で複数のリテラルが指定されている場合には、 関連付けられた条件変数は、最初のリテラルに等しく設定されます。
複数の条件名を指定すると、 その実行結果は、それらの条件名が SET ステートメントの中で指定されている順に、 各条件名に関して個別の SET ステートメントを記述したものと同じになります。
この形式の SET ステートメントを実行すると、受け取りフィールドの現行値は、送 り出しフィールドの中にあるアドレス値によって置き換えられます。
フォーマット 5: データ・ポインター用の SET ステートメント .----------------------. V | >>-SET----+-ID-4-------------+-+--TO--+-ID-6-------------+----->< '-ADDRESS OF--ID-5-' +-ADDRESS OF--ID-7-+ +-NULL-------------+ '-NULLS------------'
USAGE IS POINTER として記述されている必要があります。
ID-5 は、リンケージ・セクションの中に定義されたレベル 01 またはレベル 77 の項目である必要があります。これらの項目のアドレスは、TO 句の中に指定されたオペランドの値に設定されます。
ID-5 は、参照変更にすることはできません。
USAGE IS POINTER として記述されている必要があります。
受け取りフィールドが、無効なアドレスの値を含むように設定します。
以下の表は、フォーマット 5 の 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-----------------'
ID-8 またはリテラル-1 は、 以下に示す種類の入り口点の 1 つを参照する必要があります。
SET...TO ENTRY ステートメントが参照するプログラム名は、 PGMNAME コンパイラー・オプションの影響を受けることがあります。 詳細については、「Enterprise 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.
このフォーマットの 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 は、現在実行中のメソッドが呼び出されたオブジェクトを参照するように設定されます。