- IMS DB 基础教程
- IMS DB - 首页
- IMS DB - 概述
- IMS DB - 结构
- IMS DB - DL/I 术语
- IMS DB - DL/I 处理
- IMS DB - 控制块
- IMS DB - 编程
- IMS DB - Cobol 基础
- IMS DB - DL/I 函数
- IMS DB - PCB 掩码
- IMS DB - SSA
- IMS DB - 数据检索
- IMS DB - 数据操作
- IMS DB - 二级索引
- IMS DB - 逻辑数据库
- IMS DB - 恢复
- IMS DB 有用资源
- IMS DB - 问答
- IMS DB - 快速指南
- IMS DB - 有用资源
IMS DB - Cobol 基础
我们在 COBOL 应用程序程序中包含 DL/I 调用以与 IMS 数据库通信。我们在 COBOL 程序中使用以下 DL/I 语句来访问数据库:
- 入口语句
- Goback 语句
- 调用语句
入口语句
它用于将控制权从 DL/I 传递到 COBOL 程序。以下是入口语句的语法:
ENTRY 'DLITCBL' USING pcb-name1 [pcb-name2]
以上语句在 COBOL 程序的过程部分中编码。让我们深入了解 COBOL 程序中入口语句的详细信息:
批处理初始化模块触发应用程序程序,并在其控制下执行。
DL/I 加载所需的控制块和模块以及应用程序程序,并将控制权交给应用程序程序。
DLITCBL 代表DL/I 到 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 数据集,否则程序将异常终止。
调用语句
调用语句用于请求 DL/I 服务,例如对 IMS 数据库执行某些操作。以下是调用语句的语法:
CALL 'CBLTDLI' USING DLI Function Code PCB Mask Segment I/O Area [Segment Search Arguments]
以上语法显示了您可以与调用语句一起使用的参数。我们将在下表中讨论每个参数:
序号 | 参数和描述 |
---|---|
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.