我有一张地图,用户在其中输入两个要在数据库表中更新的值。我编写了这两个程序,但我不知道如何将在地图中输入的两个字段值传递给另一个程序。我开始知道我可以使用链接部分。但不知道它的语法或任何细节。谁能帮我语法。谢谢
2 回答
程序中应该有一些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
并且您想将这些值传递给名为 的第二个 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).
的 PROCEDURE DIVISIONPROG2
看起来像这样:
PROCEDURE DIVISION USING FIELD1, FIELD2.
或者,您可以将整个记录作为单个参数传递PROG1
:
CALL PROGRAM-NAME USING SCREEN-DATA
并且在PROG2
PROCEDURE DIVISION USING LINKAGE-DATA.
最后,当PROG2
完成它的工作时,它应该以GOBACK
or结束EXIT PROGRAM
。不要使用STOP RUN
,因为这也会退出主程序 ( PROG1
)。
COBOL 调用约定类似于大多数其他过程语言。参数可以通过引用(默认)、值或内容传递。大多数 COBOL 供应商都支持所有这些参数传递机制,但在实现上可能存在细微差别。以上示例适用于 IBM Enterprise COBOL。如果您使用的是不同版本的 COBOL,最好查看您的 COBOL 参考指南和 COBOL 编程指南。
您可以在线获取 IBM Enterprise COBOL 指南:Language Reference Guide 和Programming Reference Guide
您可以像在两个批处理 COBOL 程序之间传递参数一样。但是,您必须小心,您还必须传递两个强制参数,即 DFHEIBLK 和 DFHCOMMAREA。
实际上,在您的调用程序中,您可能会在编译器列表中看到这两个参数已添加到 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.