用 COBOL
下面的代码示例说明了如何编写 IMS 程序来访问 COBOL 中的 IMS 数据库。
程序右边的数字是指程序后面的注释。 这种程序可以作为批处理程序运行,也可以作为面向批处理的 BMP 运行。
样本 COBOL 程序
Identification Division.
Program-ID. BATCOBOL.
Environment Division.
Data Division.
Working-Storage Section.
01 Func-Codes.
05 Func-GU Picture XXXX Value 'GU '.
05 Func-GHU Picture XXXX Value 'GHU '.
05 Func-GN Picture XXXX Value 'GHN '.
05 Func-GHN Picture XXXX Value 'GHN '.
05 Func-GNP Picture XXXX Value 'GNP '.
05 Func-GHNP Picture XXXX Value 'GHNP'.
05 Func-REPL Picture XXXX Value 'REPL'.
05 Func-ISRT Picture XXXX Value 'ISRT'.
05 Func-DLET Picture XXXX Value 'DLET'.
05 Parmcount Picture S9(5) Value +4 Comp-5.
01 Unqual-SSA.
05 Seg-Name Picture X(08) Value ' '.
05 Filler Picture X Value ' '.
01 Qual-SSA-Mast.
05 Seg-Name-M Picture X(08) Value 'ROOTMast'.
05 Begin-Paren-M Picture X Value '('.
05 Key-Name-M Picture X(08) Value 'KeyMast '.
05 Kel-Oper-M Picture X(05) Value ' ='.
05 Key-Value-M Picture X(06) Value 'VVVVVV'.
05 End-Paren-M Picture X Value ')'.
01 Qual-SSA-Det.
05 Seg-Name-D Picture X(08) Value 'ROOTDET '.
05 Begin-Paren-D Picture X Value '('.
05 Key-Name-D Picture X(08) Value 'KEYDET '.
05 Rel-Oper-D Picture X(05) Value ' ='.
05 Key-Value-D Picture X(06) Value 'VVVVVV'.
05 End-Paren-D Picture X Value ')'.
01 Det-Seg-In.
05 Data1 Picture X.
05 Data2 Picture X.
01 Mast-Seg-In.
05 Data1 Picture X.
05 Data2 Picture X.
linkage section.
01 IO-PCB.
05 Filler Picture X(10).
05 IO-Status-Code Picture XX.
05 Filler Picture X(20).
01 DB-PCB-Mast.
05 Mast-Dbd-Name Picture X(8).
05 Mast-Seg-Level Picture XX.
05 Mast-Status-Code Picture XX.
05 Mast-Proc-Opt Picture XXXX.
05 Filler Picture S9(5) Comp-5.
05 Mast-Seg-Name Picture X(8).
05 Mast-Len-KFB Picture S9(5) Comp-5.
05 Mast-Nu-Senseg Picture S9(5) Comp-5.
05 Mast-Key-FB Picture X(256).
01 DB-PCB-Detail.
05 Det-Dbd-Name Picture X(8).
05 Det-Seg-Level Picture XX.
05 Det-Status-Code Picture XX.
05 Det-Proc-Opt Picture XXXX.
05 Filler Picture S9(5) Comp-5.
05 Det-Seg-Name Picture X(8).
05 Det-Len-KFB Picture S9(5) Comp-5.
05 Det-Nu-Senseg Picture S9(5) Comp-5.
05 Det-Key-FB Picture X(256).
Procedure Division using IO-PCB DB-PCB-Mast DB-PCB-Detail.
Call 'CBLTDLI' using Func-GU DB-PCB-Detail
Det-seg-in Qual-SSA-Det.
.
.
Call 'CBLTDLI' using Parmcount Func-ghu DB-PCB-Mast
Mast-seg-in Qual-SSA-Mast.
.
.
Call 'CBLTDLI' using Func-GHN DB-PCB-Mast
Mast-seg-in.
.
.
Call 'CBLTDLI' using Func-REPL DB-PCB-Mast
Mast-seg-in.
.
.
Goback.注:
- 定义程序与 77 级或 01 级工作存储器条目一起使用的每个 DL/I 调用函数。 每个图片子句都定义为四个字母数字字符,并且为每个函数分配了一个值。 如果要包含可选的 parmcount 字段,那么可以初始化每种调用类型的计数值。 您也可以使用 COBOL COPY 语句将这些标准说明包含在程序中。
- 为未限定的 SSA 设置了 9 字节区域。 在程序发出需要未限定 SSA 的调用之前,它会将分段名称移至此区域。 如果一个呼叫需要两个或多个 SSA ,那么您可能需要定义其他区域。
- 01 级工作存储器条目定义应用程序使用的每个合格 SSA。 由于字段值不同,因此必须单独定义合格的 SSA。
- 01 级工作存储器条目定义用于将段传递到数据库和从数据库传递段的 I/O 区域。 您可以使用 01 级别下的子条目进一步定义 I/O 区域。 您可以对每种分段类型使用单独的 I/O 区域,也可以定义一个用于所有分段的 I/O 区域。
- 01 级别的链接部分条目定义程序需要的每个 PCB 的掩码。 数据库 PCB 表示输入和输出数据库。 发出每个 DL/I 调用后,程序会通过此链接来检查状态码。 您可以在 DB PCB 中定义每个字段,以便可以在程序中引用该字段。
- 这是批处理程序的标准过程划分语句。 在 IMS 装入程序的 PSB 后, IMS 将控制权传递给应用程序。 PSB 包含 PSB 中定义的所有 PCB。 过程部分语句上
USING的编码通过程序用于在链接部分中定义 PCB 掩码的名称来引用每个 PCB。 必须按照 PSB 中定义 PCB 的顺序列出 PCB。先前的代码示例假定 I/O PCB 已传递到应用程序。 当程序是批处理程序时,必须在 PSBGEN 的 PSBGEN 语句上指定 CMPAT = YES ,以便包括 I/O PCB。 由于批处理程序需要 I/O PCB 才能进行系统服务调用,因此应该始终为批处理程序指定 CMPAT = YES。
仅在主程序中使用条目 DLITCBL 语句。 请勿在被调用程序中使用。
- 此调用使用限定的 SSA 从数据库中检索数据。 在发出调用之前,程序必须初始化 SSA 的键或数据值,以便它指定要检索的特定段。 程序应在发出调用后立即测试在调用中引用的 DB PCB 中的状态码。 您可以在 COBOL 程序的 DL/I 调用中包含 parmcount 参数,但在调用示例状态码错误例程时除外。 COBOL 中从不需要。
- 这是另一个包含合格 SSA 的检索调用。
- 这是一个不合格的检索调用。
REPL调用将替换在最近的 Get Hold 调用中检索到的段。 该段将替换为调用 (MAST-SEG-IN) 中引用的 I/O 区域的内容。- 程序在完成处理时发出 GOBACK 语句。
相关阅读: 有关如何使用这些过程的信息,请参阅 IMS V 15.4 系统定义。