IMS DB – 数据检索
IMS DB – 数据检索
IMS DL/I 调用中使用的各种数据检索方法如下 –
- 顾呼
- GN 呼叫
- 使用命令代码
- 多重处理
让我们考虑以下 IMS 数据库结构来了解数据检索函数调用 –
顾呼
GU调用的基本原理如下 –
-
GU 调用称为获取唯一调用。它用于随机处理。
-
如果应用程序没有定期更新数据库或者数据库更新的次数较少,那么我们使用随机处理。
-
GU 调用用于将指针放置在特定位置以供进一步顺序检索。
-
GU 调用与先前调用建立的指针位置无关。
-
GU 调用处理基于调用语句中提供的唯一键字段。
-
如果我们提供一个不唯一的关键字段,则 DL/I 返回关键字段的第一个段出现。
CALL 'CBLTDLI' USING DLI-GU PCB-NAME IO-AREA LIBRARY-SSA BOOKS-SSA ENGINEERING-SSA IT-SSA
上面的示例显示我们通过提供一组完整的合格 SSA 来发出 GU 调用。它包括从根级别开始到我们要检索的段出现的所有关键字段。
GU 调用注意事项
如果我们没有在调用中提供完整的合格 SSA 集,则 DL/I 将按以下方式工作 –
-
当我们在 GU 调用中使用非限定 SSA 时,DL/I 访问数据库中满足您指定条件的第一个段出现。
-
当我们发出一个没有任何 SSA 的 GU 调用时,DL/I 返回数据库中第一个出现的根段。
-
如果呼叫中没有提及一些中间级别的 SSA,则 DL/I 使用该段的已建立位置或未限定 SSA 的默认值。
状态代码
下表显示了 GU 调用后的相关状态代码 –
S.No | 状态代码和描述 |
---|---|
1 |
Spaces 通话成功 |
2 |
GE DL/I 找不到符合呼叫中指定条件的段 |
GN 呼叫
GN 呼叫的基本原理如下 –
-
GN 调用称为获取下一个调用。它用于基本的顺序处理。
-
指针在数据库中的初始位置在第一条数据库记录的根段之前。
-
在成功调用 GN 之后,数据库指针位置在序列中的下一个段出现之前。
-
GN 呼叫从前一次呼叫建立的位置开始通过数据库。
-
如果 GN 调用不合格,则无论其类型如何,它都会以分层顺序返回数据库中出现的下一个段。
-
如果 GN 呼叫包括 SSA,则 DL/I 仅检索满足所有指定 SSA 要求的段。
CALL 'CBLTDLI' USING DLI-GN PCB-NAME IO-AREA BOOKS-SSA
上面的例子显示我们发出一个 GN 调用,提供顺序读取记录的起始位置。它获取第一次出现的 BOOKS 段。
状态代码
下表显示了 GN 呼叫后的相关状态代码 –
S.No | 状态代码和描述 |
---|---|
1 |
Spaces 通话成功 |
2 |
GE DL/I 找不到符合呼叫中指定条件的段。 |
3 |
GA 不合格的 GN 调用在数据库层次结构中向上移动一级以获取段。 |
4 |
GB 已到达数据库末尾且未找到段。 |
GK 一个不合格的 GN 调用试图获取一个特定类型的段,而不是刚刚检索的段,但保持在相同的层次级别。 |
命令代码
命令代码与调用一起使用以获取段出现。下面讨论与调用一起使用的各种命令代码。
F 命令代码
注意事项 –
-
在调用中指定 F 命令代码时,调用将处理该段的第一次出现。
-
F命令代码可以在我们想要顺序处理时使用,它可以与GN调用和GNP调用一起使用。
-
如果我们在 GU 调用中指定 F 命令代码,则它没有任何意义,因为 GU 调用默认获取第一个出现的段。
L 命令代码
注意事项 –
-
当在调用中指定 L 命令代码时,调用将处理段的最后一次出现。
-
当我们想顺序处理时可以使用L命令代码,它可以与GN调用和GNP调用一起使用。
D 命令代码
注意事项 –
-
D 命令代码用于仅使用一次调用即可获取多个段出现。
-
通常,DL/I 在 SSA 中指定的最低级别段上运行,但在许多情况下,我们还需要来自其他级别的数据。在这些情况下,我们可以使用 D 命令代码。
-
D 命令代码可以轻松检索段的整个路径。
C 命令代码
注意事项 –
-
C 命令代码用于连接键。
-
使用关系运算符有点复杂,因为我们需要指定字段名称、关系运算符和搜索值。相反,我们可以使用 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 命令代码
注意事项 –
-
当我们发出 GU 或 GN 调用时,DL/I 在检索到的最低级别段建立其父系。
-
如果我们包含 P 命令代码,则 DL/I 在分层路径中的更高级别段建立其亲子关系。
U 命令代码
注意事项 –
-
当在GN呼叫的非限定SSA中指定U命令代码时,DL/I限制对该段的搜索。
-
如果 U 命令代码与合格的 SSA 一起使用,则它会被忽略。
V 命令代码
注意事项 –
-
V 命令代码的工作方式与 U 命令代码类似,但它限制在特定级别和层次结构之上的所有级别搜索段。
-
与合格的 SSA 一起使用时,将忽略 V 命令代码。
Q 命令代码
注意事项 –
-
Q 命令代码用于排队或保留一段专供您的应用程序使用。
-
Q 命令代码用于交互环境中,其中另一个程序可能会更改段。
多重处理
一个程序在 IMS 数据库中可以有多个位置,这称为多重处理。多重处理可以通过两种方式完成 –
- 多块PCB
- 多重定位
多块PCB
可以为单个数据库定义多个 PCB。如果有多个 PCB,那么应用程序可以有不同的视图。由于额外 PCB 带来的开销,这种实现多重处理的方法效率低下。
多重定位
程序可以使用单个 PCB 在数据库中维护多个位置。这是通过为每个分层路径维护一个不同的位置来实现的。多重定位用于同时顺序访问两种或多种类型的段。