📅  最后修改于: 2020-11-27 05:20:42             🧑  作者: Mango
IMS DL / I调用中使用的各种数据检索方法如下-
让我们考虑以下IMS数据库结构,以了解数据检索函数调用-
GU通话的基本原理如下-
GU呼叫称为“获取唯一呼叫”。它用于随机处理。
如果应用程序没有定期更新数据库或数据库更新次数较少,那么我们将使用随机处理。
GU调用用于将指针放置在特定位置以进行进一步的顺序检索。
GU调用独立于先前调用建立的指针位置。
GU呼叫处理基于call语句中提供的唯一键字段。
如果我们提供的键字段不是唯一的,则DL / I返回键字段的第一个片段出现。
CALL 'CBLTDLI' USING DLI-GU
PCB-NAME
IO-AREA
LIBRARY-SSA
BOOKS-SSA
ENGINEERING-SSA
IT-SSA
上例显示了我们通过提供完整的合格SSA集来发出GU呼叫。它包括从根级别到要检索的段出现的所有关键字段。
如果我们没有在呼叫中提供完整的合格SSA集合,则DL / I将以以下方式工作-
当我们在GU调用中使用不合格的SSA时,DL / I将访问数据库中符合您指定条件的第一个段。
当我们发出不带任何SSA的GU调用时,DL / I返回数据库中根段的首次出现。
如果呼叫中未提及某些中间级别的SSA,则DL / I使用该段的未确定SSA的已建立位置或默认值。
下表显示了GU调用后的相关状态码-
S.No | Status Code & Description |
---|---|
1 |
Spaces Successful call |
2 |
GE DL/I could not find a segment that met the criteria specified in the call |
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 | Status Code & Description |
---|---|
1 |
Spaces Successful call |
2 |
GE DL/I could not find a segment that met the criteria specified in the call. |
3 |
GA An unqualified GN call moves up one level in the database hierarchy to fetch the segment. |
4 |
GB End of database is reached and segment not found. |
GK An unqualified GN call tries to fetch a segment of a particular type other than the one just retrieved but stays in the same hierarchical level. |
命令代码与调用一起使用以获取段出现。下面讨论了与调用一起使用的各种命令代码。
注意事项-
在调用中指定F命令代码后,该调用将处理该段的首次出现。
当我们要顺序处理时,可以使用F命令代码,并且可以将其用于GN调用和GNP调用。
如果我们通过GU调用指定F命令代码,则它没有任何意义,因为GU调用默认情况下会获取第一个段。
注意事项-
在调用中指定了L命令代码后,该调用将处理该段的最后一次出现。
当我们要顺序处理时,可以使用L命令代码,它可以与GN调用和GNP调用一起使用。
注意事项-
D命令代码用于仅通过一次调用就获取多个片段。
通常,DL / I在SSA中指定的最低级别的分段上运行,但是在许多情况下,我们也希望从其他级别获取数据。在这种情况下,我们可以使用D命令代码。
D命令代码可轻松检索段的整个路径。
注意事项-
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
注意事项-
当我们发出GU或GN呼叫时,DL / I在获取的最低级别段建立其父级。
如果我们包含一个P命令代码,那么DL / I将在层次结构路径的较高级别段建立其父项。
注意事项-
如果在GN呼叫中的不合格SSA中指定了U命令代码,则DL / I会限制对该段的搜索。
如果将U命令代码与合格的SSA一起使用,则将其忽略。
注意事项-
V命令代码的工作方式与U命令代码类似,但是它限制了对特定级别和层次结构上方所有级别的段的搜索。
与合格的SSA一起使用时,将忽略V命令代码。
注意事项-
Q命令代码用于排队或保留一段以供您的应用程序专用。
Q命令代码用于交互式环境中,在该环境中另一个程序可能会更改段。
一个程序可以在IMS数据库中具有多个位置,这称为多重处理。多种处理可以通过两种方式完成-
可以为一个数据库定义多个PCB。如果有多个PCB,则应用程序可以具有不同的视图。由于额外的PCB施加了额外的开销,因此这种用于执行多次处理的方法效率低下。
程序可以使用单个PCB在数据库中维护多个职位。这是通过为每个分层路径维护一个不同的位置来实现的。多个定位用于同时顺序访问两个或更多类型的段。