- IMS 資料庫基礎教程
- IMS 資料庫 - 首頁
- IMS 資料庫 - 概述
- IMS 資料庫 - 結構
- IMS 資料庫 - DL/I 術語
- IMS 資料庫 - DL/I 處理
- IMS 資料庫 - 控制塊
- IMS 資料庫 - 程式設計
- IMS 資料庫 - Cobol 基礎
- IMS 資料庫 - DL/I 函式
- IMS 資料庫 - PCB 掩碼
- IMS 資料庫 - SSA
- IMS 資料庫 - 資料檢索
- IMS 資料庫 - 資料操作
- IMS 資料庫 - 二次索引
- IMS 資料庫 - 邏輯資料庫
- IMS 資料庫 - 恢復
- IMS 資料庫有用資源
- IMS 資料庫 - 問答
- IMS 資料庫 - 快速指南
- IMS 資料庫 - 有用資源
IMS 資料庫 - DL/I 函式
DL/I 函式是 DL/I 呼叫中使用的第一個引數。此函式指示 IMS DL/I 呼叫將在 IMS 資料庫上執行哪個操作。DL/I 函式的語法如下:
01 DLI-FUNCTIONS. 05 DLI-GU PIC X(4) VALUE 'GU '. 05 DLI-GHU PIC X(4) VALUE 'GHU '. 05 DLI-GN PIC X(4) VALUE 'GN '. 05 DLI-GHN PIC X(4) VALUE 'GHN '. 05 DLI-GNP PIC X(4) VALUE 'GNP '. 05 DLI-GHNP PIC X(4) VALUE 'GHNP'. 05 DLI-ISRT PIC X(4) VALUE 'ISRT'. 05 DLI-DLET PIC X(4) VALUE 'DLET'. 05 DLI-REPL PIC X(4) VALUE 'REPL'. 05 DLI-CHKP PIC X(4) VALUE 'CHKP'. 05 DLI-XRST PIC X(4) VALUE 'XRST'. 05 DLI-PCB PIC X(4) VALUE 'PCB '.
此語法表示以下要點:
對於此引數,我們可以提供任何四個字元的名稱作為儲存欄位來儲存函式程式碼。
DL/I 函式引數在 COBOL 程式的工作儲存區段中編碼。
為了指定 DL/I 函式,程式設計師需要在 DL/I 呼叫中編寫一個 05 級資料名稱(例如 DLI-GU),因為 COBOL 不允許在 CALL 語句中編寫文字。
DL/I 函式分為三類:獲取、更新和其他函式。讓我們詳細討論每一個。
獲取函式
獲取函式類似於任何程式語言支援的讀取操作。獲取函式用於從 IMS DL/I 資料庫中獲取段。IMS DB 中使用以下獲取函式:
- 獲取唯一段 (Get Unique)
- 獲取下一個段 (Get Next)
- 獲取父段內的下一個段 (Get Next within Parent)
- 獲取並保留唯一段 (Get Hold Unique)
- 獲取並保留下一個段 (Get Hold Next)
- 獲取並保留父段內的下一個段 (Get Hold Next within Parent)
讓我們考慮以下 IMS 資料庫結構來理解 DL/I 函式呼叫:
獲取唯一段 (Get Unique)
“GU”程式碼用於獲取唯一段函式。它的工作方式類似於 COBOL 中的隨機讀取語句。它用於根據欄位值獲取特定段的出現。可以使用段搜尋引數提供欄位值。“GU”呼叫的語法如下:
CALL 'CBLTDLI' USING DLI-GU
PCB Mask
Segment I/O Area
[Segment Search Arguments]
如果透過在 COBOL 程式中為所有引數提供適當的值來執行上述呼叫語句,則可以從資料庫中的段 I/O 區域檢索該段。在上面的示例中,如果提供 Library、Magazines 和 Health 的欄位值,則可以獲取 Health 段的所需出現。
獲取下一個段 (Get Next)
“GN”程式碼用於獲取下一個段函式。它的工作方式類似於 COBOL 中的讀取下一個語句。它用於按順序獲取段的出現。訪問資料段出現的預定義模式是從上到下,然後從左到右。“GN”呼叫的語法如下:
CALL 'CBLTDLI' USING DLI-GN
PCB Mask
Segment I/O Area
[Segment Search Arguments]
如果透過在 COBOL 程式中為所有引數提供適當的值來執行上述呼叫語句,則可以按順序從資料庫中的段 I/O 區域檢索段的出現。在上面的示例中,它首先訪問 Library 段,然後是 Books 段,依此類推。我們將一次又一次地執行 GN 呼叫,直到到達我們想要的段出現。
獲取父段內的下一個段 (Get Next within Parent)
“GNP”程式碼用於獲取父段內的下一個段。此函式用於按順序檢索從屬於已建立的父段的段出現。“GNP”呼叫的語法如下:
CALL 'CBLTDLI' USING DLI-GNP
PCB Mask
Segment I/O Area
[Segment Search Arguments]
獲取並保留唯一段 (Get Hold Unique)
“GHU”程式碼用於獲取並保留唯一段。保留函式指定我們將在檢索後更新該段。獲取並保留唯一段函式對應於獲取唯一段呼叫。以下是“GHU”呼叫的語法:
CALL 'CBLTDLI' USING DLI-GHU
PCB Mask
Segment I/O Area
[Segment Search Arguments]
獲取並保留下一個段 (Get Hold Next)
“GHN”程式碼用於獲取並保留下一個段。保留函式指定我們將在檢索後更新該段。獲取並保留下一個段函式對應於獲取下一個段呼叫。以下是“GHN”呼叫的語法:
CALL 'CBLTDLI' USING DLI-GHN
PCB Mask
Segment I/O Area
[Segment Search Arguments]
獲取並保留父段內的下一個段 (Get Hold Next within Parent)
“GHNP”程式碼用於獲取並保留父段內的下一個段。保留函式指定我們將在檢索後更新該段。獲取並保留父段內的下一個段函式對應於獲取父段內的下一個段呼叫。以下是“GHNP”呼叫的語法:
CALL 'CBLTDLI' USING DLI-GHNP
PCB Mask
Segment I/O Area
[Segment Search Arguments]
更新函式
更新函式類似於任何其他程式語言中的重寫或插入操作。更新函式用於更新 IMS DL/I 資料庫中的段。在使用更新函式之前,必須對段出現成功呼叫帶有保留子句的操作。IMS DB 中使用以下更新函式:
- 插入 (Insert)
- 刪除 (Delete)
- 替換 (Replace)
插入 (Insert)
“ISRT”程式碼用於插入函式。“ISRT”函式用於向資料庫新增新段。它用於更改現有資料庫或載入新資料庫。以下是“ISRT”呼叫的語法:
CALL 'CBLTDLI' USING DLI-ISRT
PCB Mask
Segment I/O Area
[Segment Search Arguments]
刪除 (Delete)
“DLET”程式碼用於刪除函式。它用於從 IMS DL/I 資料庫中刪除段。以下是“DLET”呼叫的語法:
CALL 'CBLTDLI' USING DLI-DLET
PCB Mask
Segment I/O Area
[Segment Search Arguments]
替換 (Replace)
“REPL”程式碼用於獲取並保留父段內的下一個段。替換函式用於替換 IMS DL/I 資料庫中的段。以下是“REPL”呼叫的語法:
CALL 'CBLTDLI' USING DLI-REPL
PCB Mask
Segment I/O Area
[Segment Search Arguments]
其他函式
IMS DL/I 呼叫中使用以下其他函式:
- 檢查點 (Checkpoint)
- 重啟 (Restart)
- PCB
檢查點 (Checkpoint)
“CHKP”程式碼用於檢查點函式。它用於 IMS 的恢復功能。以下是“CHKP”呼叫的語法:
CALL 'CBLTDLI' USING DLI-CHKP
PCB Mask
Segment I/O Area
[Segment Search Arguments]
重啟 (Restart)
“XRST”程式碼用於重啟函式。它用於 IMS 的重啟功能。以下是“XRST”呼叫的語法:
CALL 'CBLTDLI' USING DLI-XRST
PCB Mask
Segment I/O Area
[Segment Search Arguments]
PCB
PCB 函式用於 IMS DL/I 資料庫中的 CICS 程式。以下是 PCB 呼叫的語法:
CALL 'CBLTDLI' USING DLI-PCB
PCB Mask
Segment I/O Area
[Segment Search Arguments]
您可以在恢復章節中找到有關這些函式的更多詳細資訊。