IMS DB - 数据检索

IMS DL/I呼叫中使用的各种数据检索方法如下:

  • GU Call

  • GN Call

  • Using Command Codes

  • Multiple Processing

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

IMS DATABASE1

GU调用

GU调用的基本原理如下 :

  • GU调用称为获取唯一调用.它用于随机处理.

  • 如果应用程序没有定期更新数据库,或者数据库更新的数量较少,那么我们使用随机处理.

  • GU调用用于将指针放在特定位置,以便进一步顺序检索.

  • GU调用与前一次调用建立的指针位置无关.

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

  • 如果我们提供的密钥字段不是唯一的,那么DL/I将返回密钥字段的第一个分段出现.

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

上述exa mple显示我们通过提供一整套合格的SSA来发出GU调用.它包括从根级别到我们要检索的段发生的所有关键字段.

GU调用注意事项

如果我们不这样做在通话中提供完整的合格SSA,然后DL/I按以下方式工作&减去;

  • 当我们在GU调用中使用不合格的SSA,DL/I访问数据库中符合您指定条件的第一个段出现.

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

  • 如果调用中没有提到中间级别的某些SSA ,然后DL/I使用既定位置或该段的非限定SSA的默认值.

状态代码

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

S.No状态代码&描述
1

Spaces

成功通话

2

GE

DL/我找不到符合通话中指定条件的段

GN Call

GN调用的基本原理如下:

  • GN调用称为Get Next调用.它用于基本顺序处理.

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

  • 在成功进行GN调用之后,数据库指针位置在序列中下一个段出现之前.

  • GN调用从前一次调用建立的位置开始通过数据库.

  • 如果GN调用不合格,则返回下一个段发生的数据库,无论其类型如何,按层次顺序排列.

  • 如果GN调用包含SSA,则DL/I仅检索满足所有指定要求的段SSA.

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

上面的例子显示我们发行GN cal l提供起始位置以顺序读取记录.它取出第一次出现的BOOKS段.

状态码

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

S.No状态代码&描述
1

Spaces

成功通话

2

GE

DL/我找不到符合通话中指定条件的段.

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命令代码

注意事项:

  • 当在一个不合格的SSA中指定U命令代码时GN调用,DL/I限制搜索段.

  • 如果与合格的SSA一起使用,则忽略U命令代码.

V命令代码

注意事项:

  • V命令代码的工作方式类似于U co mmand代码,但它限制了对特定级别的段的搜索以及层次结构之上的所有级别.

  • 与合格者一起使用时,将忽略V命令代码SSA.

Q命令代码

注意事项:

  • Q命令代码用于排队或保留段以供您的应用程序专用.

  • Q命令代码用于交互式环境中,其他程序可能会对某个段进行更改.

多处理

程序在IMS数据库中可以有多个位置,称为多处理.可以通过两种方式进行多次处理 :

  • 多个PCB

  • 多重定位

多个PCB

可以为单个数据库定义多个PCB.如果有多个PCB,则应用程序可以具有不同的视图.这种实现多处理的方法效率低,因为额外的PCB会产生开销.

多重定位

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