📅  最后修改于: 2020-11-27 05:17:23             🧑  作者: Mango
我们将DL / I调用包含在COBOL应用程序内部以与IMS数据库进行通信。我们在COBOL程序中使用以下DL / I语句访问数据库-
它用于将控制从DL / I传递到COBOL程序。这是entry语句的语法-
ENTRY 'DLITCBL' USING pcb-name1
[pcb-name2]
上面的语句编码在COBOL程序的过程部中。让我们进入COBOL程序中entry语句的细节-
批初始化模块触发应用程序,并在其控制下执行。
DL / I加载所需的控制块和模块以及应用程序,并将控制权交给应用程序。
DLITCBL代表DL / I到COBOL 。 entry语句用于定义程序中的入口点。
当我们在COBOL中调用子程序时,也会提供其地址。同样,当DL / I将控制权交给应用程序时,它还会提供程序PSB中定义的每个PCB的地址。
由于PCB驻留在应用程序外部,因此必须在COBOL程序的“链接”部分中定义应用程序中使用的所有PCB。
链接部分中的PCB定义称为PCB掩模。
PCB掩模与存储中的实际PCB之间的关系是通过在输入语句中列出PCB来创建的。 entry语句中列出的顺序应与PSBGEN中出现的顺序相同。
它用于将控制权传递回IMS控制程序。以下是Goback语句的语法-
GOBACK
以下列出的是有关Goback语句要注意的基本要点-
GOBACK编码在应用程序的末尾。它将控制从程序返回到DL / I。
我们不应该使用STOP RUN,因为它将控制权返回给操作系统。如果我们使用STOP RUN,则DL / I将永远没有机会执行其终止功能。这就是为什么在DL / I应用程序中使用Goback语句的原因。
在发出Goback语句之前,必须关闭COBOL应用程序中使用的所有非DL / I数据集,否则该程序将异常终止。
调用语句用于请求DL / I服务,例如在IMS数据库上执行某些操作。这是call语句的语法-
CALL 'CBLTDLI' USING DLI Function Code
PCB Mask
Segment I/O Area
[Segment Search Arguments]
上面的语法显示了可以与call语句一起使用的参数。我们将在下表中讨论它们中的每个-
S.No. | Parameter & Description |
---|---|
1 |
DLI Function Code Identifies the DL/I function to be performed. This argument is the name of the four character fields that describe the I/O operation. |
2 |
PCB Mask The PCB definition inside the Linkage Section is called as PCB Mask. They are used in the entry statement. No SELECT, ASSIGN, OPEN, or CLOSE statements are required. |
3 |
Segment I/O Area Name of an input/output work area. This is an area of the application program into which the DL/I puts a requested segment. |
4 |
Segment Search Arguments These are optional parameters depending on the type of the call issued. They are used to search data segments inside the IMS database. |
以下是有关Call语句的注意事项-
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.