IMS DB - DL/I 功能


DL/I 函数是 DL/I 调用中使用的第一个参数。该函数告知 IMS DL/I 调用将在 IMS 数据库上执行哪个操作。DL/I 函数的语法如下 -

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 '.

该语法代表以下关键点 -

  • 对于这个参数,我们可以提供任意的四字符名称作为存储字段来存储函数代码。

  • DL/I 函数参数编码在 COBOL 程序的工作存储部分中。

  • 为了指定 DL/I 函数,程序员需要在 DL/I 调用中编写 05 级数据名称之一,例如 DLI-GU,因为 COBOL 不允许在 CALL 语句上编写文字。

  • DL/I 函数分为三类:Get、Update 和 Other 函数。让我们详细讨论它们中的每一个。

获取函数

获取函数类似于任何编程语言支持的读取操作。Get 函数用于从 IMS DL/I 数据库获取段。IMS DB 中使用以下 Get 函数 -

  • 变得独一无二
  • 下一步
  • 在父级中获取下一个
  • 保持独特
  • 抓住下一个
  • 在父级中保持下一步

让我们考虑以下 IMS 数据库结构来理解 DL/I 函数调用 -

IMS数据库1

变得独一无二

“GU”代码用于“获取唯一”功能。它的工作原理类似于 COBOL 中的随机读取语句。它用于根据字段值获取特定段的出现。可以使用段搜索参数来提供字段值。GU 调用的语法如下 -

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

如果通过为 COBOL 程序中的所有参数提供适当的值来执行上述调用语句,则可以从数据库中检索段 I/O 区域中的段。在上面的示例中,如果您提供“图书馆”、“杂志”和“健康”字段值,那么您将获得所需的“健康”段。

下一步

“GN”代码用于“获取下一个”功能。它的工作原理类似于 COBOL 中的 read next 语句。它用于获取序列中出现的段。用于访问数据段出现的预定义模式是沿着层次结构向下,然后从左到右。GN 调用的语法如下 -

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

如果通过为 COBOL 程序中的所有参数提供适当的值来执行上述调用语句,则可以按顺序从数据库中检索段 I/O 区域中出现的段。在上面的示例中,它首先访问 Library 段,然后访问 Books 段,依此类推。我们一次又一次地执行 GN 调用,直到到达我们想要的段出现位置。

在父级中获取下一个

“GNP”代码用于在父级中获取下一个。该函数用于按顺序检索从属于已建立的父段的段出现次数。GNP 调用的语法如下 -

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

保持独特

“GHU”代码用于“获取唯一”。Hold 函数指定我们将在检索后更新该段。Get Hold Unique 函数对应于 Get Unique 调用。下面给出的是 GHU 调用的语法 -

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

抓住下一个

“GHN”代码用于“获取下一步”。Hold 函数指定我们将在检索后更新该段。Get Hold Next 功能对应于 Get Next 调用。下面给出的是 GHN 调用的语法 -

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

在父级中保持下一步

“GHNP”代码用于在父级中获取下一个。Hold 函数指定我们将在检索后更新该段。“Parent 内的 Get Hold Next”功能对应于“Parent 内的 Get Next”调用。下面给出的是 GHNP 调用的语法 -

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

更新功能

更新函数类似于任何其他编程语言中的重写或插入操作。更新函数用于更新 IMS DL/I 数据库中的段。在使用更新函数之前,必须对段出现成功调用 Hold 子句。IMS DB 中使用以下更新函数 -

  • 插入
  • 删除
  • 代替

插入

“ISRT”代码用于插入功能。ISRT 函数用于向数据库添加新段。它用于更改现有数据库或加载新数据库。下面给出的是 ISRT 调用的语法 -

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

删除

“DLET”代码用于删除功能。它用于从 IMS DL/I 数据库中删除段。下面给出的是 DLET 调用的语法 -

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

代替

“REPL”代码用于在父级中获取下一个。Replace 函数用于替换 IMS DL/I 数据库中的段。下面给出的是 REPL 调用的语法 -

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

其他功能

IMS DL/I 调用中使用以下其他函数 -

  • 检查站
  • 重新开始
  • 印刷电路板

检查站

“CHKP”代码用于检查点功能。它用于IMS的恢复功能。下面给出的是 CHKP 调用的语法 -

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

重新开始

“XRST”代码用于重启功能。它用于IMS的重启功能。下面给出的是 XRST 调用的语法 -

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

印刷电路板

PCB 函数用于 IMS DL/I 数据库中的 CICS 程序。下面给出的是 PCB 调用的语法 -

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

您可以在恢复章节中找到有关这些功能的更多详细信息。