📜  IMS DB-编程(1)

📅  最后修改于: 2023-12-03 14:42:05.694000             🧑  作者: Mango

IMS DB-编程

IMS DB(Information Management System - Database)是一种IBM主机上的分层数据库管理系统,由IBM公司在1968年创建。它是一种层次型数据库,数据存储在分层结构中,支持最大的可扩展性和灵活性。IMS DB集成了许多高效的数据管理功能,如数据检索,更新和安全等。IMS是IBM的主机系统(z/OS)上主流的数据库系统之一。

概述

IMS DB通过类似树形结构的方式管理数据,其中最上层是根节点,最下层是叶子节点。每个节点都可以有多个子节点。每个节点存储一个记录,记录是一个称为segment(段)的定长数据结构。可以在segment内部进行访问,每个segment可以包含多个field(字段)。

IMS DB使用DLI(IMS Database Language)进行编程,DLI提供了Cobol和PL/I两种方式进行开发。IMS DB对于分布式环境和网络有很好的支持,有Java和C++等API供程序员调用。

数据结构

IMS DB中的数据都被保存在segment(段)中。每个segment都是一个由数据元素(field)所组成的定长数据结构。segment之间的关系通过不同类型的标识符来进行链接。IMS DB使用五种基本类型的segment:

  • Control segment:控制段,每个数据库只有一个控制段,控制着整个数据库的存取。
  • Root segment:根段,主索引段,用于存储最初访问记录的指针。
  • Segment:数据段,包含实际的数据。
  • Occurrence segment:重复次数段,表示重复次数。
  • Pointer segment:指针段,指示其他segment的位置。
编程

IMS DB提供了多种编程方式,包括Cobol和PL/I,也使用Java和C++等API供程序员访问IMS DB。以下是一个IMS DB和Cobol的程序实例:

        IDENTIFICATION DIVISION.                    
        PROGRAM-ID. MYPGM.                           
        AUTHOR. MY NAME.                             
        ENVIRONMENT DIVISION.                        
        INPUT-OUTPUT SECTION.                        
        FILE-CONTROL.                                
            SELECT EMPLOYEE-DB                       
                ASSIGN TO IMSDB                       
                DLI "DLITEST"                         
                END-EXEC.                             
        DATA DIVISION.                                
        WORKING-STORAGE SECTION.                      
            EXEC SQL INCLUDE SQLCA END-EXEC.          
            01  MY-STRUCTURE.                          
                05  LS-AREA-EMPLOYEE-DB               
                    PIC S9(8)                          VALUE 1.
            01  EMPLOYEE-DB.                           
                05  PART1.                             
                    10  NAME                          PIC X(12).
                    10  EMPLOYEE-ID.                  
                        15  ID                       PIC 9(5).
                    10  DEPT                        PIC X.
                05  PART2.                             
                    10  SALARY                        PIC 9(7).
                    10  ADDRESS.                       
                        15  STREET                    PIC X(20).
                        15  CITY                      PIC X(15).
                        15  STATE                     PIC XX.
                        15  ZIPCODE                   PIC X(10).
            01  ERROR-CODES.                           
                05  DLI-ERROR-CODE                   PIC S9(8)  COMP.
                05  DLI-SQL-CODE                     PIC S9(8)  COMP.
                05  DLI-DB-NAME                      PIC X(18).
                05  DLI-SEG-NAME                     PIC X(18).
                05  DLI-PSB-NAME                     PIC X(8).
                05  DLI-DBD-NAME                     PIC X(8).
        PROCEDURE DIVISION.                            
            IMS-CONNECT                                  
                ADDRESS OF EMPLOYEE-DB                   
                DB-NAME 'DLITEST'                        
                PSB-NAME 'DBLPSB01'                      
                PCB                                     
            END-ACCEPT                                    
                IF SQLCODE NOT = 0                        
                    MOVE SQLCODE TO DLI-SQL-CODE           
                    MOVE -12345678 TO DLI-ERROR-CODE      
                    PERFORM ERROR-HANDLING                
                END-IF                                      
                CALL 'CBLTDLI' USING                      
                    MY-STRUCTURE                           
                    'GTER'                                 
                    ERROR-CODES                            
                    'EMPLOYEE NUMBER'                      
                    AD-KEY                                 
                    PSB-NAME 'DBLPSB01'                     
                    PCB                                    
                END-CALL                                    
                IF DLI-ERROR-CODE = 0                     
                    DISPLAY NAME " HAS " SALARY " DOLLAR"  
                END-IF                                      
                IMS-DISCONNECT                              
                    PCB                                   
                END                                            
        END PROGRAM MYPGM.                              

以上程序演示了如何在Cobol中通过IMS DB访问数据库。需要说明的是,IMS DB的编程语言不同于其他主流数据库系统,例如SQL Server和Oracle等。开发人员需要了解IMS DB的独特编程语言和数据结构以及与IMS DB API之间的交互。