📜  IMS DB-数据检索

📅  最后修改于: 2020-11-27 05:20:42             🧑  作者: Mango


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

  • GU电话
  • GN通话
  • 使用命令代码
  • 多重处理

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

IMS数据库1

GU电话

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呼叫。它包括从根级别到要检索的段出现的所有关键字段。

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调用不合格,则它将按分层顺序返回数据库中下一个出现的段,而不管其类型如何。

  • 如果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命令代码后,该调用将处理该段的首次出现。

  • 当我们要顺序处理时,可以使用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在数据库中维护多个职位。这是通过为每个分层路径维护一个不同的位置来实现的。多个定位用于同时顺序访问两个或更多类型的段。