我有一张地图,用户在其中输入两个要在数据库表中更新的值。我写了两个程序,但我不知道如何将地图中输入的两个字段值传递给另一个程序。我开始知道我可以使用Linkage Section。但不知道语法或其上的任何细节。任何人都可以帮助我的语法。谢谢
答案 0 :(得分: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
,并且您希望将这些值传递给名为PROG2
的第二个COBOL程序。
通常,这是在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).
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 Enterprise COBOL指南:Language Reference Guide 和Programming Reference Guide
答案 1 :(得分:0)
您可以像在两个批处理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.