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 函数用于从 IMS DL/I 数据库中获取段。IMS DB 中使用以下 Get 函数 −

  • 获取唯一值
  • 获取下一个
  • 获取父级中的下一个
  • 获取保留唯一值
  • 获取保留下一个
  • 获取父级中的保留下一个

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

IMS Database1

获取唯一值

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

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

如果通过为 COBOL 程序中的所有参数提供适当的值来执行上述调用语句,则可以从数据库中检索段 I/O 区域中的段。在上面的示例中,如果您提供 Library、Magazines 和 Health 的字段值,则可以获得 Health 段的所需出现。

获取下一个

"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"代码用于获取保留唯一值。保留函数指定我们将在检索后更新段。获取保留唯一值函数对应于获取唯一值调用。下面给出了 GHU 调用的语法 −

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

获取下一个保持

"GHN"代码用于获取下一个保持。保持函数指定我们将在检索后更新段。获取下一个保持函数对应于获取下一个调用。下面给出了 GHN 调用的语法 −

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

Get Hold Next within Parent

'GHNP' code is used for Get Hold Next within Parent. Hold function specifies that we are going to update the segment after retrieval. The Get Hold Next within Parent function corresponds to the Get Next within Parent call. Given below is the syntax of a GHNP call −

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"代码用于在 Parent 中获取 Hold Next。Replace 函数用于替换 IMS DL/I 数据库中的片段。下面给出了 REPL 调用的语法 −

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

其他函数

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

  • 检查点
  • 重新启动
  • PCB

检查点

"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

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

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

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