IMS 数据库 - 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 函数分为三类:获取、更新和其他函数。让我们详细讨论每一个。

获取函数

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

  • 获取唯一段 (Get Unique)
  • 获取下一个段 (Get Next)
  • 获取父段内的下一个段 (Get Next within Parent)
  • 获取并保留唯一段 (Get Hold Unique)
  • 获取并保留下一个段 (Get Hold Next)
  • 获取并保留父段内的下一个段 (Get Hold Next within Parent)

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

IMS Database1

获取唯一段 (Get Unique)

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

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

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

获取下一个段 (Get Next)

“GN”代码用于获取下一个段函数。它的工作方式类似于 COBOL 中的读取下一个语句。它用于按顺序获取段的出现。访问数据段出现的预定义模式是从上到下,然后从左到右。“GN”调用的语法如下:

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

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

获取父段内的下一个段 (Get Next within Parent)

“GNP”代码用于获取父段内的下一个段。此函数用于按顺序检索从属于已建立的父段的段出现。“GNP”调用的语法如下:

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

获取并保留唯一段 (Get Hold Unique)

“GHU”代码用于获取并保留唯一段。保留函数指定我们将在检索后更新该段。获取并保留唯一段函数对应于获取唯一段调用。以下是“GHU”调用的语法:

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

获取并保留下一个段 (Get Hold Next)

“GHN”代码用于获取并保留下一个段。保留函数指定我们将在检索后更新该段。获取并保留下一个段函数对应于获取下一个段调用。以下是“GHN”调用的语法:

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

获取并保留父段内的下一个段 (Get Hold Next within Parent)

“GHNP”代码用于获取并保留父段内的下一个段。保留函数指定我们将在检索后更新该段。获取并保留父段内的下一个段函数对应于获取父段内的下一个段调用。以下是“GHNP”调用的语法:

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

更新函数

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

  • 插入 (Insert)
  • 删除 (Delete)
  • 替换 (Replace)

插入 (Insert)

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

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

删除 (Delete)

“DLET”代码用于删除函数。它用于从 IMS DL/I 数据库中删除段。以下是“DLET”调用的语法:

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

替换 (Replace)

“REPL”代码用于获取并保留父段内的下一个段。替换函数用于替换 IMS DL/I 数据库中的段。以下是“REPL”调用的语法:

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

其他函数

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

  • 检查点 (Checkpoint)
  • 重启 (Restart)
  • PCB

检查点 (Checkpoint)

“CHKP”代码用于检查点函数。它用于 IMS 的恢复功能。以下是“CHKP”调用的语法:

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

重启 (Restart)

“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]

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

广告
© . All rights reserved.