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.