IMS DB - 資料檢索



在 IMS DL/I 呼叫中使用的各種資料檢索方法如下:

  • GU 呼叫
  • GN 呼叫
  • 使用命令程式碼
  • 多重處理

讓我們考慮以下 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

以上示例顯示我們透過提供一組完整的限定 SSA 來發出 GU 呼叫。它包括從根級別到我們要檢索的段出現的全部鍵欄位。

GU 呼叫注意事項

如果我們在呼叫中沒有提供完整的限定 SSA 集,則 DL/I 將按以下方式工作:

  • 當我們在 GU 呼叫中使用非限定 SSA 時,DL/I 訪問資料庫中滿足您指定條件的第一個段出現。

  • 當我們發出沒有任何 SSA 的 GU 呼叫時,DL/I 返回資料庫中根段的第一個出現。

  • 如果在呼叫中未提及中間級別的某些 SSA,則 DL/I 使用已建立的位置或段的非限定 SSA 的預設值。

狀態程式碼

下表顯示了 GU 呼叫後的相關狀態程式碼:

序號 狀態程式碼和描述
1

空格

呼叫成功

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 呼叫後的相關狀態程式碼:

序號 狀態程式碼和描述
1

空格

呼叫成功

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 命令程式碼,但它限制了特定級別和層次結構中所有級別以上段的搜尋。

  • 當 V 命令程式碼與限定 SSA 一起使用時,會被忽略。

Q 命令程式碼

需要注意的幾點:

  • Q 命令程式碼用於將段入隊或保留以供應用程式程式獨佔使用。

  • Q 命令程式碼用於互動式環境,在該環境中,另一個程式可能會對段進行更改。

多重處理

一個程式可以在 IMS 資料庫中有多個位置,這稱為多重處理。多重處理可以透過兩種方式完成:

  • 多個 PCB
  • 多重定位

多個 PCB

可以為單個數據庫定義多個 PCB。如果有多個 PCB,則應用程式程式可以擁有不同的檢視。這種實現多重處理的方法效率低下,因為額外的 PCB 會帶來開銷。

多重定位

程式可以使用單個 PCB 在資料庫中維護多個位置。這是透過為每個層次路徑維護一個不同的位置來實現的。多重定位用於同時順序訪問兩種或多種型別的段。

廣告

© . All rights reserved.