1

ユーザーがデータベーステーブルで更新される2つの値を入力するマップがあります。両方のプログラムを作成しましたが、マップに入力された2つのフィールド値を別のプログラムに渡す方法がわかりません。リンケージセクションが使えることを知りました。しかし、構文やその詳細はわかりません。誰かが構文を手伝ってくれますか?ありがとうございました

4

2 に答える 2

4

WORKING-STORAGEプログラムには、CICSマップから取得された値が保持されるものが含まれている必要があります。例えば:

01 SCREEN-DATA.
    05 SOME-FIELD         PIC X(10).
    05 SOME-OTHER-FIELD   PIC 9(4).

77  PROGRAM-NAME          PIC X(8) VALUE 'PROG2'.

このプログラムが呼び出されPROG1、これらの値をと呼ばれる2番目のCOBOLプログラムに渡したいとしますPROG2。通常、これは動的サブルーチン呼び出しを使用してCOBOLで実行されます。動的呼び出しを実行する一般的な方法は、呼び出されたプログラムの名前をWORKING-STORAGE変数に入れることです。PROGRAM-NAME私はこの目的のために宣言しました。データは、個別のアイテムとして呼び出されたプログラムに渡される場合があります。

CALL PROGRAM-NAME USING SOME-FIELD, SOME-OTHER-FIELD

PROG2上記は、通過する動的呼び出しでSOME-FILEDありSOME-OTHER-FIELD、参照によるものです。

PROG2次のように、リンケージセクションを介してこれらのデータを受け取ります。

  LINKAGE SECTION.
  01 LINKAGE-DATA.
     05 FIELD1          PIC X(10).
     05 FILED2          PIC 9(4).

のPROCEDUREDIVISIONは、次のPROG2ようになります。

  PROCEDURE DIVISION USING FIELD1, FIELD2.

または、レコード全体を1つのパラメーターとして次の場所から渡すこともできますPROG1

  CALL PROGRAM-NAME USING SCREEN-DATA

とでPROG2

  PROCEDURE DIVISION USING LINKAGE-DATA.

最後に、PROG2作業が完了すると、GOBACKまたはで終了する必要がありますEXIT PROGRAMSTOP RUNメインプログラム()も終了しますので使用しないでくださいPROG1

COBOLの呼び出し規約は、他のほとんどの手続き型言語と似ています。パラメータは、参照(デフォルト)、値、またはコンテンツによって渡すことができます。ほとんどのCOBOLベンダーは、これらのパラメーター受け渡しメカニズムをすべてサポートしていますが、実装にわずかな違いがある場合があります。上記の例は、IBMEnterpriseCOBOL用です。異なるバージョンのCOBOLを使用している場合は、「COBOLリファレンスガイド」および「COBOLプログラミングガイド」を確認することをお勧めします。

IBMEnterpriseCOBOLガイドはオンラインで入手できます。言語リファレンスガイド およびプログラミングリファレンスガイド

于 2012-04-20T16:16:19.577 に答える
0

2つのバッチCOBOLプログラム間で行うのと同じように、引数を渡すことができます。ただし、DFHEIBLKとDFHCOMMAREAの2つの必須引数も渡す必要があることに注意する必要があります。

実際、呼び出されたプログラムでは、これら2つの引数がPROCEDURE DIVISIONで追加されているため、呼び出し側プログラムでそれらが必要であることがコンパイラーのリストに表示される場合があります。読みやすくするために、ソースコードに明示的に記述することをお勧めします。

結局、それはこのようになります:

呼び出されたプログラム:

PROCEDURE DIVISION USING DFHEIBLK DFHCOMMAREA PARM1 PARM2 ... PARMXX.

呼び出しプログラム:

WORKING-STORAGE SECTION.
01 PGM-NAME   PIC X(8).

PROCEDURE DIVISION.
     CALL PGM-NAME USING DFHEIBLK DFHCOMMAREA PARM1 PARM2 ... PARMXX
     END-CALL.
于 2014-08-06T07:59:15.340 に答える