IMS DB - Cobol 基础知识

我们在 COBOL 应用程序中包含 DL/I 调用,以便与 IMS 数据库进行通信。我们在 COBOL 程序中使用以下 DL/I 语句来访问数据库 −

  • Entry 语句
  • Goback 语句
  • Call 语句

Entry 语句

它用于将控制权从 DL/I 传递到 COBOL 程序。以下是 entry 语句 −

的语法
ENTRY 'DLITCBL' USING pcb-name1
[pcb-name2]

上述语句是在 COBOL 程序的 Procedure Division 中编码的。让我们详细了解一下 COBOL 程序中的入口语句 −

  • 批处理初始化模块触发应用程序并在其控制下执行。

  • DL/I 加载所需的控制块和模块以及应用程序,并将控制权交给应用程序。

  • DLITCBL 代表 DL/I to COBOL。入口语句用于定义程序中的入口点。

  • 当我们在 COBOL 中调用子程序时,也会提供其地址。同样,当 DL/I 将控制权交给应用程序时,它还会提供程序 PSB 中定义的每个 PCB 的地址。

  • 应用程序中使用的所有 PCB 都必须在 COBOL 程序的 链接部分 内定义,因为 PCB 位于应用程序之外。

  • 链接部分内的 PCB 定义称为 PCB 掩码

  • PCB 掩码和存储中的实际 PCB 之间的关系是通过在入口语句中列出 PCB 来创建的。入口语句中的列出顺序应与它们在 PSBGEN 中出现的顺序相同。

Goback 语句

它用于将控制权传回 IMS 控制程序。以下是 Goback 语句 − 的语法

GOBACK

下面列出了有关 Goback 语句 − 的基本注意事项

  • GOBACK 是在应用程序的末尾编写的。它将控制权从程序返回给 DL/I。

  • 我们不应该使用 STOP RUN,因为它会将控制权返回给操作系统。如果我们使用 STOP RUN,DL/I 将永远没有机会执行其终止功能。这就是为什么在 DL/I 应用程序中使用 Goback 语句的原因。

  • 在发出 Goback 语句之前,必须关闭 COBOL 应用程序中使用的所有非 DL/I 数据集,否则程序将异常终止。

Call 语句

Call 语句用于请求 DL/I 服务,例如在 IMS 数据库上执行某些操作。以下是 call 语句的语法 −

CALL 'CBLTDLI' USING DLI Function Code
                        PCB Mask
                        Segment I/O Area
                        [Segment Search Arguments]

上述语法显示了可与调用语句一起使用的参数。我们将在下表中讨论每个参数 −

S.No. 参数与说明
1

DLI 功能代码

标识要执行的 DL/I 功能。此参数是描述 I/O 操作的四个字符字段的名称。

2

PCB 掩码

链接部分内的 PCB 定义称为 PCB 掩码。它们用于输入语句。不需要 SELECT、ASSIGN、OPEN 或 CLOSE 语句。

3

段 I/O 区域

输入/输出工作区的名称。这是应用程序的一个区域,DL/I 将请求的段放入其中。

4

段搜索参数

这些是可选参数,具体取决于发出的调用类型。它们用于搜索 IMS 数据库内的数据段。

以下是关于调用语句 − 的注意事项

  • CBLTDLI 代表 COBOL 到 DL/I。它是与程序的对象模块进行链接编辑的接口模块的名称。

  • 每次 DL/I 调用后,DLI 都会在 PCB 中存储一个状态代码。程序可以使用此代码来确定调用是成功还是失败。

示例

如需进一步了解 COBOL,您可以阅读我们的 COBOL 教程。以下示例显示了使用 IMS 数据库和 DL/I 调用的 COBOL 程序的结构。我们将在接下来的章节中详细讨论示例中使用的每个参数。

IDENTIFICATION DIVISION.
PROGRAM-ID. TEST1.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 DLI-FUNCTIONS.
   05 DLI-GU        PIC X(4)    VALUE 'GU  '.
   05 DLI-GHU       PIC X(4)    VALUE 'GHU '.
   05 DLI-GN        PIC X(4)    VALUE 'GN  '.
   05 DLI-GHN       PIC X(4)    VALUE 'GHN '.
   05 DLI-GNP       PIC X(4)    VALUE 'GNP '.
   05 DLI-GHNP      PIC X(4)    VALUE 'GHNP'.
   05 DLI-ISRT      PIC X(4)    VALUE 'ISRT'.
   05 DLI-DLET      PIC X(4)    VALUE 'DLET'.
   05 DLI-REPL      PIC X(4)    VALUE 'REPL'.
   05 DLI-CHKP      PIC X(4)    VALUE 'CHKP'.
   05 DLI-XRST      PIC X(4)    VALUE 'XRST'.
   05 DLI-PCB       PIC X(4)    VALUE 'PCB '.
01  SEGMENT-I-O-AREA        PIC X(150).
LINKAGE SECTION.
01  STUDENT-PCB-MASK.
   05 STD-DBD-NAME              PIC X(8).
   05 STD-SEGMENT-LEVEL         PIC XX.
   05 STD-STATUS-CODE           PIC XX.
   05 STD-PROC-OPTIONS          PIC X(4).
   05 FILLER                    PIC S9(5) COMP.
   05 STD-SEGMENT-NAME          PIC X(8).
   05 STD-KEY-LENGTH            PIC S9(5) COMP.
   05 STD-NUMB-SENS-SEGS        PIC S9(5) COMP.
   05 STD-KEY                   PIC X(11).
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING STUDENT-PCB-MASK.
A000-READ-PARA.
110-GET-INVENTORY-SEGMENT.
   CALL ‘CBLTDLI’ USING DLI-GN
                  STUDENT-PCB-MASK
                  SEGMENT-I-O-AREA.
GOBACK.