- IMS DB 基礎教程
- IMS DB - 首頁
- IMS DB - 概述
- IMS DB - 結構
- IMS DB - DL/I 術語
- IMS DB - DL/I 處理
- IMS DB - 控制塊
- IMS DB - 程式設計
- IMS DB - Cobol 基礎
- IMS DB - DL/I 函式
- IMS DB - PCB 掩碼
- IMS DB - SSA
- IMS DB - 資料檢索
- IMS DB - 資料操作
- IMS DB - 二級索引
- IMS DB - 邏輯資料庫
- IMS DB - 恢復
- IMS DB 有用資源
- IMS DB - 問答
- IMS DB - 快速指南
- IMS DB - 有用資源
IMS DB - Cobol 基礎
我們在 COBOL 應用程式程式中包含 DL/I 呼叫以與 IMS 資料庫通訊。我們在 COBOL 程式中使用以下 DL/I 語句來訪問資料庫:
- 入口語句
- Goback 語句
- 呼叫語句
入口語句
它用於將控制權從 DL/I 傳遞到 COBOL 程式。以下是入口語句的語法:
ENTRY 'DLITCBL' USING pcb-name1
[pcb-name2]
以上語句在 COBOL 程式的過程部分中編碼。讓我們深入瞭解 COBOL 程式中入口語句的詳細資訊:
批處理初始化模組觸發應用程式程式,並在其控制下執行。
DL/I 載入所需的控制塊和模組以及應用程式程式,並將控制權交給應用程式程式。
DLITCBL 代表DL/I 到 COBOL。入口語句用於定義程式中的入口點。
當我們在 COBOL 中呼叫子程式時,也會提供其地址。同樣,當 DL/I 將控制權交給應用程式程式時,它還會提供程式 PSB 中定義的每個 PCB 的地址。
應用程式程式中使用的所有 PCB 必須在 COBOL 程式的連線段內定義,因為 PCB 駐留在應用程式程式之外。
連線段內 PCB 的定義稱為PCB 掩碼。
透過在入口語句中列出 PCB 來建立儲存器中 PCB 掩碼和實際 PCB 之間的關係。入口語句中的列出順序應與其在 PSBGEN 中出現的順序相同。
Goback 語句
它用於將控制權傳回 IMS 控制程式。以下是 Goback 語句的語法:
GOBACK
下面列出了關於 Goback 語句需要注意的基本要點:
GOBACK 在應用程式程式的末尾編碼。它將控制權從程式返回到 DL/I。
我們不應使用 STOP RUN,因為它將控制權返回到作業系統。如果我們使用 STOP RUN,DL/I 將永遠沒有機會執行其終止功能。這就是為什麼在 DL/I 應用程式程式中使用 Goback 語句的原因。
在發出 Goback 語句之前,必須關閉 COBOL 應用程式程式中使用的所有非 DL/I 資料集,否則程式將異常終止。
呼叫語句
呼叫語句用於請求 DL/I 服務,例如對 IMS 資料庫執行某些操作。以下是呼叫語句的語法:
CALL 'CBLTDLI' USING DLI Function Code
PCB Mask
Segment I/O Area
[Segment Search Arguments]
以上語法顯示了您可以與呼叫語句一起使用的引數。我們將在下表中討論每個引數:
| 序號 | 引數和描述 |
|---|---|
| 1 | DLI 函式程式碼 標識要執行的 DL/I 函式。此引數是描述 I/O 操作的四個字元欄位的名稱。 |
| 2 | PCB 掩碼 連線段內 PCB 的定義稱為 PCB 掩碼。它們用於入口語句中。不需要 SELECT、ASSIGN、OPEN 或 CLOSE 語句。 |
| 3 | 段 I/O 區域 輸入/輸出工作區的名稱。這是一個應用程式程式區域,DL/I 將請求的段放入其中。 |
| 4 | 段搜尋引數 這些是根據發出的呼叫的型別而定的可選引數。它們用於搜尋 IMS 資料庫內的段資料。 |
以下是關於呼叫語句需要注意的事項:
CBLTDLI 代表COBOL 到 DL/I。它是與程式的物件模組連結編輯的介面模組的名稱。
在每次 DL/I 呼叫後,DLI 會將狀態程式碼儲存在 PCB 中。程式可以使用此程式碼來確定呼叫是否成功。
示例
為了更好地理解 COBOL,您可以檢視我們的 COBOL 教程此處。以下示例顯示了使用 IMS 資料庫和 DL/I 呼叫的 COBOL 程式的結構。我們將在接下來的章節中詳細討論示例中使用的每個引數。
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST1.
DATA DIVISION.
WORKING-STORAGE SECTION.
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 '.
01 SEGMENT-I-O-AREA PIC X(150).
LINKAGE SECTION.
01 STUDENT-PCB-MASK.
05 STD-DBD-NAME PIC X(8).
05 STD-SEGMENT-LEVEL PIC XX.
05 STD-STATUS-CODE PIC XX.
05 STD-PROC-OPTIONS PIC X(4).
05 FILLER PIC S9(5) COMP.
05 STD-SEGMENT-NAME PIC X(8).
05 STD-KEY-LENGTH PIC S9(5) COMP.
05 STD-NUMB-SENS-SEGS PIC S9(5) COMP.
05 STD-KEY PIC X(11).
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING STUDENT-PCB-MASK.
A000-READ-PARA.
110-GET-INVENTORY-SEGMENT.
CALL ‘CBLTDLI’ USING DLI-GN
STUDENT-PCB-MASK
SEGMENT-I-O-AREA.
GOBACK.