我有一个映射,用户在其中输入两个要在数据库表中更新的值。我编写了两个程序,但我无法知道如何将映射中输入的两个字段值传递给另一个程序。我开始知道我可以使用链接部分。但是不知道语法或有关它的任何细节。谁能帮我语法。谢谢
程序中应该有一些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
,并且您希望将这些值传递给名为 PROG2
的第二个 COBOL 程序。通常,这是在 COBOL 中使用动态子例程调用。完成动态调用的典型方法是将将程序调用到工作存储变量中。我为此目的宣布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).
PROG2
的程序划分看起来像这样:
PROCEDURE DIVISION USING FIELD1, FIELD2.
或者,您可以将整个记录作为单个参数从 PROG1
传递:
CALL PROGRAM-NAME USING SCREEN-DATA
并在PROG2
PROCEDURE DIVISION USING LINKAGE-DATA.
最后,当PROG2
完成其工作时,它应该以GOBACK
或EXIT PROGRAM
终止。不要将STOP RUN
用作这也将退出主程序(PROG1
)。
COBOL 调用约定类似于大多数其他过程语言。可以传递参数按引用(默认值)、按值或按内容。大多数 COBOL 供应商都支持所有这些参数传递机制,但在实施上可能存在细微差异。以上示例适用于 IBM Enterprise COBOL。如果你正在使用不同版本的 COBOL,最好查看您的 COBOL 参考指南和 COBOL 编程指南。
您可以在线获取 IBM 企业 COBOL 指南:语言参考指南和编程参考指南
您可以像在两个批处理 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.