Ims Db 简明教程

IMS DB - Data Retrieval

IMS DL/I 调用中使用的各种数据检索方法如下 −

  1. GU Call

  2. GN Call

  3. Using Command Codes

  4. Multiple Processing

让我们考虑以下 IMS 数据库结构,以了解数据检索函数调用 −

ims database1

GU Call

GU 调用的基本原理如下 −

  1. GU 调用称为 Get Unique 调用。它用于随机处理。

  2. 如果应用程序没有定期更新数据库,或者数据库更新数量较少,那么可以使用随机处理。

  3. GU 调用用于将指针置于某个特定位置,以便后续顺序检索。

  4. GU 调用独立于由前一个调用建立的指针位置。

  5. GU 调用处理基于调用语句中所提供的唯一键字段。

  6. 如果我们提供了非唯一的键字段,那么 DL/I 将返回该键字段的第一个分段出现。

CALL 'CBLTDLI' USING DLI-GU
                     PCB-NAME
                     IO-AREA
                     LIBRARY-SSA
                     BOOKS-SSA
                     ENGINEERING-SSA
                     IT-SSA

上面的示例显示,我们通过提供一组完整的限定 SSA 来发出 GU 调用。它包括了从根级别到我们要检索的分段出现的全部键字段。

GU Call Considerations

如果我们没有在调用中提供一组完整的限定 SSA,那么 DL/I 将按以下方式工作:

  1. 当我们在 GU 调用中使用非限定 SSA 时,DL/I 会访问数据库中满足您指定的条件的第一个分段出现。

  2. 当我们在没有任何 SSA 的情况下发出 GU 调用时,DL/I 会返回数据库中根分段的第一个出现。

  3. 如果调用中没有提到中间级别的某些 SSA,那么 DL/I 将为该分段使用已建立的位置或非限定 SSA 的默认值。

Status Codes

下表显示了 GU 调用之后的相关状态码:

S.No

Status Code & Description

1

Spaces Successful call

2

GE DL/I 找不到符合调用中指定条件的分段

GN Call

GN调用的基本原理如下:

  1. GN 调用称为“获取下一个”调用。它用于基本的顺序处理。

  2. 数据库中指针的初始位置在第一个数据库记录的根分段之前。

  3. 在成功的 GN 调用之后,数据库指针位置在序列中的下一个分段出现之前。

  4. GN 调用根据先前的调用所建立的位置开始遍历数据库。

  5. 如果 GN 调用是非限定的,那么它将返回数据库中下一个分段出现,而不论其类型,按照层次结构顺序。

  6. 如果 GN 调用包括 SSA,那么 DL/I 仅检索满足所有指定 SSA 要求的分段。

CALL 'CBLTDLI' USING DLI-GN
                     PCB-NAME
                     IO-AREA
                     BOOKS-SSA

上面的示例显示我们发出一个 GN 调用,提供开始读取记录的顺序位置。它获取 BOOKS 段的第一个出现。

Status Codes

下表显示 GN 调用后的相关状态码 −

S.No

Status Code & Description

1

Spaces Successful call

2

GE DL/I 无法找到符合调用中指定条件的段。

3

GA 一个不合格的 GN 调用在数据库层次结构中向上移动一级以获取段。

4

GB 数据库结束并且段未找到。

GK 一个不合格的 GN 调用尝试获取刚检索到的段以外特定类型的段,但保持在相同的层次级别中。

Command Codes

命令码与调用一起用于获取段出现。下面将讨论与调用一起使用的各种命令码。

F Command Code

重点注意事项:

  1. 当在调用中指定 F 命令码时,该调用处理段的第一个出现。

  2. 当我们想要顺序处理时,可以使用 F 命令码,它可与 GN 调用和 GNP 调用一起使用。

  3. 如果我们使用 GU 调用指定 F 命令码,则它没有任何意义,因为 GU 调用默认获取第一个段出现。

L Command Code

重点注意事项:

  1. 当在调用中指定 L 命令码时,该调用处理段的最后一个出现。

  2. 当我们想要顺序处理时,可以使用 L 命令码,它可与 GN 调用和 GNP 调用一起使用。

D Command Code

重点注意事项:

  1. D 命令码用于仅使用单个调用获取多个段出现。

  2. 通常,DL/I 对 SSA 中指定的最低级别段进行操作,但在很多情况下,我们也需要其他级别的段数据。在这些情况下,我们可以使用 D 命令码。

  3. D 命令码使得可以轻松检索段的整个路径。

C Command Code

重点注意事项:

  1. C 命令码用于连接键。

  2. 使用关系运算符有点复杂,因为我们需要指定一个字段名称、一个关系运算符和一个搜索值。相反,我们可以使用 C 命令码提供连接的键。

以下示例演示了 C 命令码的使用 −

01 LOCATION-SSA.
   05 FILLER		     PIC X(11) VALUE ‘INLOCSEG*C(‘.
   05 LIBRARY-SSA      PIC X(5).
   05 BOOKS-SSA        PIC X(4).
   05 ENGINEERING-SSA  PIC X(6).
   05 IT-SSA           PIC X(3)
   05 FILLER		     PIC X	VALUE ‘)’.

CALL 'CBLTDLI' USING DLI-GU
                     PCB-NAME
                     IO-AREA
                     LOCATION-SSA

P Command Code

重点注意事项:

  1. 当我们发出 GU 或 GN 调用时,DL/I 会在检索到的最低级别段处建立其父系关系。

  2. 如果我们包括 P 命令代码,那么 DL/I 将在分层路径的高级别段上建立其父级关系。

U Command Code

重点注意事项:

  1. 当在 GN 调用中未限定的 SSA 中指定 U 命令代码时,DL/I 将限制对段的搜索。

  2. 如果 U 命令代码与限定的 SSA 一起使用,则将被忽略。

V Command Code

重点注意事项:

  1. V 命令代码的工作方式与 U 命令代码类似,但它会限制对特定级别和层次结构中所有更高级别的段的搜索。

  2. 当 V 命令代码与限定的 SSA 一起使用时,将被忽略。

Q Command Code

重点注意事项:

  1. Q 命令代码用于为您的应用程序独占使用排队或保留段。

  2. Q 命令代码在另一个程序可能对段进行更改的交互式环境中使用。

Multiple Processing

一个程序可以在 IMS 数据库中具有多个位置,这被称为多重处理。多重处理可以通过两种方式完成:

  1. Multiple PCBs

  2. Multiple Positioning

Multiple PCBs

可以为单个数据库定义多个 PCB。如果存在多个 PCB,那么应用程序可以对其有不同的视图。此实现多重处理的方法由于额外 PCB 带来的开销而效率低下。

Multiple Positioning

一个程序可以使用单个 PCB 在数据库中维护多个位置。这是通过为每个分层路径维护一个不同的位置来实现的。多重定位用于同时以顺序方式访问两个或更多类型的段。