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功能,程序员需要编码其中一个05级数据名称,例如DL/I调用中的DLI-GU,因为COBOL不允许在CALL语句上编码文字.
DL/I函数分为三类:获取,更新和其他功能.让我们详细讨论它们.
获取函数类似于任何编程语言支持的读操作. Get函数用于从IMS DL/I数据库中获取段.以下Get函数用于IMS DB :
Get Unique
Get Next
Get Next within Parent
Get Hold Unique
Get Hold Next
Get Hold Next within Parent
让我们考虑以下IMS数据库结构来理解DL/I函数调用 :
'GU '代码用于Get Unique功能.它的工作方式类似于COBOL中的随机读取语句.它用于根据字段值获取特定的段出现.可以使用段搜索参数提供字段值. GU调用的语法如下 :
CALL 'CBLTDLI' USING DLI-GU PCB Mask Segment I/O Area [Segment Search Arguments]
如果通过为COBOL程序中的所有参数提供适当的值来执行上述调用语句,您可以从数据库中检索段I/O区域中的段.在上面的示例中,如果您提供了Library,Magazines和Health的字段值,那么您将获得所需的Health段.
'GN'代码用于Get Next功能.它的工作方式类似于COBOL中的read next语句.它用于获取序列中的段出现.用于访问数据段出现的预定义模式在层次结构中,然后从左到右. GN调用的语法如下 :
CALL 'CBLTDLI' USING DLI-GN PCB Mask Segment I/O Area [Segment Search Arguments]
如果通过为COBOL程序中的所有参数提供适当的值来执行上述调用语句,您可以按顺序从数据库中检索段I/O区域中的段出现.在上面的示例中,它首先访问Library段,然后是Books段,依此类推.我们一次又一次地执行GN调用,直到我们达到我们想要的段出现.
'GNP'代码被使用在父母中获取下一个.此函数用于按顺序检索从属于已建立父段的段出现. GNP调用的语法如下 :
CALL 'CBLTDLI' USING DLI-GNP PCB Mask Segment I/O Area [Segment Search Arguments]
'GHU'代码用于Get Hold Unique.保持功能指定我们将在检索后更新段. Get Hold Unique功能对应于Get Unique呼叫.下面给出了GHU调用的语法 :
CALL 'CBLTDLI' USING DLI-GHU PCB Mask Segment I/O Area [Segment Search Arguments]
'GHN'代码用于Get Hold Next.保持功能指定我们将在检索后更新段. Get Hold Next功能对应于Get Next调用.下面给出了GHN调用的语法 :
CALL 'CBLTDLI' USING DLI-GHN PCB Mask Segment I/O Area [Segment Search Arguments]
'GHNP '代码用于Parent中的Get Hold Next.保持功能指定我们将在检索后更新段. Parent函数中的Get Hold Next对应于Parent调用中的Get Next.下面给出了GHNP调用的语法 :
CALL 'CBLTDLI' USING DLI-GHNP PCB Mask Segment I/O Area [Segment Search Arguments]
更新函数类似于用任何其他编程语言重写或插入操作.更新功能用于更新IMS DL/I数据库中的段.在使用更新功能之前,必须使用Hold子句成功调用段发生.以下更新函数用于IMS DB :
Insert
Delete
Replace
'ISRT'代码用于插入函数. ISRT函数用于向数据库添加新段.它用于更改现有数据库或加载新数据库.下面给出了ISRT调用的语法 :
CALL 'CBLTDLI' USING DLI-ISRT PCB Mask Segment I/O Area [Segment Search Arguments]
使用'DLET'代码用于删除功能.它用于从IMS DL/I数据库中删除段.下面给出了DLET调用的语法 :
CALL 'CBLTDLI' USING DLI-DLET PCB Mask Segment I/O Area [Segment Search Arguments]
使用'REPL'代码在Parent中获取Hold Next. Replace函数用于替换IMS DL/I数据库中的段.下面给出了REPL调用的语法 :
CALL 'CBLTDLI' USING DLI-REPL PCB Mask Segment I/O Area [Segment Search Arguments]
以下其他功能是用于IMS DL/I呼叫 :
Checkpoint
Restart
PCB
'CHKP'代码用于检查点功能.它用于IMS的恢复功能.下面给出了CHKP调用的语法 :
CALL 'CBLTDLI' USING DLI-CHKP PCB Mask Segment I/O Area [Segment Search Arguments]
使用'XRST'代码用于重启功能.它用于IMS的重启功能.下面给出的是XRST调用的语法 :
CALL 'CBLTDLI' USING DLI-XRST PCB Mask Segment I/O Area [Segment Search Arguments]
在CICS中使用PCB功能IMS DL/I数据库中的程序.下面给出了PCB调用的语法 :
CALL 'CBLTDLI' USING DLI-PCB PCB Mask Segment I/O Area [Segment Search Arguments]
您可以在恢复章节中找到有关这些功能的更多详细信息.