Ims DB
Ims DB
Knowledge of COBOL
Basic knowledge of data base management systems
Hierarchical Structures
Why a Data Base Management System
Basic DL/I Terminology
Basic DL/I Data Base Processing
01 VENDOR-RECORD.
05 VR-VENDOR-CODE PIC X(3).
05 VR-VENDOR-NAME PIC X(30).
05 VR-VENDOR-ADDRESS PIC X(30).
05 VR-VENDOR-CITY PIC X(17).
05 VR-VENDOR-STATE PIC XX.
05 VR-VENDOR-ZIP-CODE PIC X(9).
05 VR-VENDOR-TELEPHONE PIC X(10).
05 VR-VENDOR-CONTACT PIC X(30).
01 INVENTORY-RECORD.
05 IR-ITEM-KEY.
10 IR-VENDOR-CODE PIC X(3).
10 IR-NUMBER PIC X(5).
05 IR-DESCRIPTION PIC X(35).
05 IR-UNIT-PRICE PIC S9(5)V99 COMP-3.
05 IR-AVG-UNIT-COST PIC S9(5)V99 COMP-3.
05 IR-LOCATION-QUANTITY-DATA OCCURS 20 TIMES.
10 IR-LOCATION PIC X(3).
10 IR-QUANTITY-ON-HAND PIC S9(7) COMP-3.
10 IR-REORDER-POINT PIC S9(7) COMP-3.
10 IR-QUANTITY-ON-ORDER PIC S9(7) COMP-3.
10 IR-LAST-REORDER-DATE PIC X(6).
Fig 1.2.b Record layout for the Inventory Master data set
Segment
A grouping of data
The unit of data that DL/I transfers to and from your
program in an I/O operation.
Consists of one or more fields
ADDRESS
House Street City State Country Zip
Number Name Code
Segment Type
A category of data
There can be a maximum of 255 segment types and 15
levels in one data base
Segment Occurrence
One specific segment of a particular type containing user
data
Note:-
Within a data base there is only one of each segment type- it’s part of
the data base’s definition- but there can be an unlimited number of
occurrences of each segment type.
Vendor
Item
Stock Location
Fig 1.4 The hierarchical structure of the Inventory data base with three segment types
*
01 INVENTORY-VENDOR-SEGMENT.
05 IVS-VENDOR-CODE PIC X(3).
05 IVS-VENDOR-NAME PIC X(30).
05 IVS-VENDOR-ADDRESS PIC X(30).
05 IVS-VENDOR-CITY PIC X (17).
05 IVS-VENDOR-STATE PIC XX.
05 IVS-VENDOR-ZIP-CODE PIC X(9).
05 IVS-VENDOR-TELEPHONE PIC X(10).
05 IVS-VENDOR-CONTACT PIC X(30).
*
01 INVENTORY-ITEM-SEGMENT.
05 IIS-NUMBER PIC X(5).
05 IIS-DESCRIPTION PIC X(35).
05 IIS-UNIT-PRICE PIC S9(5)V99 COMP-3.
05 IIS-AVG-UNIT-COST PIC S9(5)V99 COMP-3.
*
01 INVENTORY-STOCK-LOC-SEGMENT.
05 ISLS-LOCATION PIC X(3).
05 ISLS-QUANTITY-ON-HAND PIC S9(7) COMP-3.
05 ISLS-REORDER-POINT PIC S9(7) COMP-3.
05 ISLS-QUANTITY-ON-ORDER PIC S9(7) COMP-3.
05 ISLS-LAST-REORDER-DAT PIC X(6).
*
Fig 1.5 Segment layouts for the Inventory data base
Root Segment
The segment type at the top of a hierarchy
Data base record
Each occurrence of the root segment plus all the segment
occurrences that are subordinate to it make up one data
base record
Every data base record has one and only one root
segment, although it may have any number of
subordinate segment occurrences
Vendor 1 Vendor 2
Item 1
Item 2
Data base
Record 2
Item 1
Loc 2
Loc 2
Data base Loc 1
Loc 1
Record 1
Loc 5
Loc 4
Loc 3
Loc 2
Loc 1 Fig 1.6 Two data base records from the Inventory data base
Dependent Segments
All of the segments in a data base record other than the
root segment
They depend on one or more segments for their complete
meaning
Parent Segment
A segment that has one or more dependent segments
Child Segment
Every dependent segment in the hierarchy
Twin Segment
Two or more segment occurrences of the same type and
with the same segment occurrence as their parent are
twins of one another
Path
The series of segments that lead from the top of a data
base record (the root segment occurrence) down to any
specific segment occurrence
Must be continuous- you can’t skip intermediate levels
Customer
Ship-to
Vendor
Stock
Payment Adjustment Line Item Location
Sequential Processing
When you retrieve segments from a data base
sequentially, DL/I follows a predictable pattern: down the
hierarchy, then right.
Position
At any point, a program has a position in the data base.
Position can affect not only how segments are retrieved, but
how new segments are inserted as well
Vendor 1 Vendor 2
Item 1
Item 2
Data base
Record 2
Item 1
Loc 2
Loc 2
Data base Loc 1
Loc 1
Record 1
Loc 5
Loc 4
Loc 3
Loc 2
Loc 1
Fig 1.8 Sequential processing
Vendor 1 Vendor 2
Item 1
Item 2
Data base
Record 2
Item 1
Loc 2
Loc 2
Data base Loc 1
Loc 1
Record 1
Loc 1
Fig 1.9 Random Processing
Application
Programs
DL/I
OS
Data
Base
Application Application
Program Program
DL/I
Fig 2.5 Assembler source listing for the Inventory data base load program’s PSBGEN
Although the order in which the PCB Masks are coded in the
Linkage Section does not matter, you must list them on the
ENTRY statement in the same sequence as they appear in
your program’s PSBGEN
The GO BACK Statement
The ENTRY statement provides a mechanism for DL/I to transfer
control to your program
When your program ends, it must pass control back to the DL/I so
that DL/I can deallocate its resources and close your data base
data sets
To do that, you code a GO BACK statement, not a STOP RUN
statement
If you end a DL/I program with a STOP RUN statement, control
returns directly to the operating system; DL/I never has a chance
to perform its termination functions
So always use GO BACK rather than STOP RUN in your DL/I
programs
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 ’.
Get functions
The first six 05-level items in Fig 3.3 are get functions
They are used to retrieve segments from a DL/I data base
GU ‘get unique’ function causes DL/I to retrieve a specific
segment occurrence based on field values that you specify.
GN ‘get next’ function used to retrieve segment
occurrences in sequence
GNP ‘get next within parent’ function lets you retrieve
segment occurrences in sequence, but only subordinate to
an established parent segment
The three get function codes that contain an H are ‘get hold
functions’ and are used to specify an intent to update a
segment after you retrieve it
GHU or the ‘get hold unique’ function corresponds to GU
GHN or the ‘get hold next’ function corresponds to GN
GHNP or the ‘get hold next within parent’ function
corresponds to GNP
Update functions
Used to change data in the data base
ISRT or the ‘insert’ function is used to add a new segment
occurrence to a data base– whether it be change an existing
data base or to load a new one
DLET or the ‘delete’ function is used to remove a segment
from a data base
REPL or the ‘replace’ function is used to replace a segment
occurrence
Other functions
Functions CHKP (the ‘checkpoint’ function) and XRST (the
‘restart’ function) are used in programs to take advantage of
IMS’s recovery and restart features
The last function code PCB is used in CICS programs
01 INVENTORY-PCB-MASK.
05 IPCB-DBD-NAME PIC X(8).
05 IPCB-SEGMENT-LEVEL PIC XX.
05 IPCB-STATUS-CODE PIC XX.
05 IPCB-PROC-OPTIONS PIC X(4).
05 FILLER PIC S9(5) COMP.
05 IPCB-SEGMENT-NAME PIC X(8).
05 IPCB-KEY-LENGTH PIC S9(5) COMP.
05 IPCB-NUMB-SENS-SEGS PIC S9(5) COMP.
05 IPCB-KEY PIC X(11).
Types of SSAs
Basic Unqualified SSA
Basic Qualified SSA
Command Codes
The Null Command Code
Multiple Qualifications
01 UNQUALIFIED-SSA.
*
05 UNQUAL-SSA-SEGMENT-NAME PIC X(8).
05 FILLER PIC X VALUE SPACE.
*
01 VENDOR-SSA.
*
05 FILLER PIC X(9) VALUE ‘INVENSEG(’.
05 FILLER PIC X(10) VALUE ‘INVENCOD =’.
05 VENDOR-SSA-CODE PIC X(3).
05 FILLER PIC X VALUE ‘)’.
*
Fig 4.2 A basic qualified SSA
Equal to EQ = =
Not equal to NE = =
Greater Than GT > >
Greater than or Equal to GE >= =>
Less Than LT < <
Less than or Equal to LE <= =<
01 UNQUALIFIED-SSA.
*
05 UNQUAL-SSA-SEGMENT-NAME PIC X(8).
05 FILLER PIC X VALUE “*”.
05 UNQUAL-SSA-COMMAND-CODE PIC X.
05 FILLER PIC X VALUE SPACE.
*
01 UNQUALIFIED-SSA.
*
05 UNQUAL-SSA-SEGMENT-NAME PIC X(8).
05 FILLER PIC X VALUE “*”.
05 UNQUAL-SSA-COMMAND-CODE PIC X VALUE “-”.
05 FILLER PIC X VALUE SPACE.
*
01 VENDOR-SSA.
*
05 FILLER PIC X(9) VALUE ‘INVENSEG(’.
05 FILLER PIC X(10) VALUE ‘INVENCOD>=’.
05 VENDOR-SSA-LOW-CODE PIC X(3).
05 FILLER PIC X VALUE ‘&’.
05 FILLER PIC X(10) VALUE ‘INVENCOD<=’.
05 VENDOR-SSA-HIGH-CODE PIC X(3).
05 FILLER PIC X VALUE ‘)’.
The GU Call
The GN Call
The GNP Call
Status Codes Expected during Sequential Processing
Using Command Codes with Retrieval Calls
Multiple Processing
Item 2
Established Item 1
Parent
Loc 2
Loc 1
Established
Loc 5
Vendor 1 Parent
Loc 4
Loc 3
Loc 2 Item 2
Loc 1
Item 1
Loc 2
Loc 1
Fig 5.1 Sequential retrieval with GNP call
Loc 5
Loc 4
Loc 3
Loc 2
Loc 1
01 VENDOR-SSA.
05 FILLER PIC X(11) VALUE “INVENSEG*D(”.
05 FILLER PIC X(10) VALUE “INVENCOD =”.
05 VENDOR-SSA-CODE PIC X(3).
05 FILLER PIC X VALUE “)”.
*
01 ITEM-SSA.
05 FILLER PIC X(11) VALUE “INITMSEG*D(”.
05 FILLER PIC X(10) VALUE “INITMNUM =”.
05 ITEM-SSA-NUMBER PIC X(5).
05 FILLER PIC X VALUE “)”.
*
01 LOCATION-SSA.
05 FILLER PIC X(11) VALUE “INLOCSEG*D(”.
05 FILLER PIC X(10) VALUE “INLOCLOC =”.
05 LOCATION-SSA-CODE PIC X(3).
05 FILLER PIC X VALUE “)”.
*
01 PATH-CALL-I-O-AREA.
05 INVENTORY-VENDOR-SEGMENT PIC X(131).
05 INVENTORY-ITEM-SEGMENT PIC X(48).
05 INVENTORY-STOCK-LOC-SEGMENT PIC X(21).
*
. . .
*
CALL “CBLTDLI” USING DLI-GU
INVENTORY-PCB-MASK
PATH-CALL-I-O-AREA
VENDOR-SSA
ITEM-SSA
LOCATION-SSA.
*
01 LOCATION-SSA.
*
05 FILLER PIC X(11) VALUE ‘INLOCSEG*C(‘.
05 LOCATION-SSA-VENDOR PIC X(3).
05 LOCATION-SSA-ITEM PIC X(5).
05 LOCATION-SSA-LOCATION PIC X(3).
05 FILLER PIC X VALUE ‘)’.
*
.
.
.
CALL ‘CBLTDLI’ USING DLI-GU
INVENTORY-PCB-MASK
INVENTORY-STOCK-LOC-SEGMENT
LOCATION-SSA.
Multiple positioning
Lets a program maintain more than one position within a
data base using a single PCB
To do that, DL/I maintains a distinct position for each
hierarchical path the program processes
Most of the time, multiple positioning is used to access
segments of two or more types sequentially at the same
time
A1
Data base
Record 1
C13
C12 A2
B13
C11
B12
Data base
B11 Record 2
C22
B22 C21
B21
Customer
Ship-to
Buyer Receivable
01 CUSTOMER-SEGMENT.
05 CS-CUSTOMER-NUMBER PIC X(6).
05 CS-CUSTOMER-NAME PIC X(31).
05 CS-ADDRESS-LINE-1 PIC X(31).
05 CS-ADDRESS-LINE-2 PIC X(31).
05 CS-CITY PIC X(18).
05 CS-STATE PIC XX.
05 CS-ZIP-CODE PIC X(9).
*
01 SHIP-TO-SEGMENT.
05 STS-SHIP-TO-SEQUENCE PIC XX.
05 STS-SHIP-TO-NAME PIC X(31).
05 STS-ADDRESS-LINE-1 PIC X(31).
05 STS-ADDRESS-LINE-2 PIC X(31).
05 STS-CITY PIC X(18).
05 STS-STATE PIC XX.
05 STS-ZIP-CODE PIC X(9).
*
01 BUYER-SEGMENT.
05 BS-BUYER-NAME PIC X(31).
05 BS-TITLE PIC X(31).
05 BS-TELEPHONE PIC X(10).
*
01 RECEIVABLE-SEGMENT.
05 RS-INVOICE-NUMBER PIC X(6).
05 RS-INVOICE-DATE PIC X(6).
05 RS-PO-NUMBER PIC X(25).
05 RS-PRODUCT-TOTAL PIC S9(5)V99COMP-3.
05 RS-CASH-DISCOUNT PIC S9(5)V99COMP-3.
05 RS-SALES-TAX PIC S9(5)V99COMP-3.
05 RS-FREIGHT PIC S9(5)V99COMP-3.
05 RS-BALANCE-DUE PIC S9(5)V99COMP-3.
*
Fig 7.2 Segment Layouts for the Customer Data Base (Part 1 of 2)
01 PAYMENT-SEGMENT.
05 PS-CHECK-NUMBER PIC X(16).
05 PS-BANK-NUMBER PIC X(25).
05 PS-PAYMENT-DATE PIC X(6).
05 PS-PAYMENT-AMOUNT PIC S9(5)V99 COMP-3.
*
01 ADJUSTMENT-SEGMENT.
05 AS-REFERENCE-NUMBER PIC X(16).
05 AS-ADJUSTMENT-DATE PIC X(6).
05 AS-ADJUSTMENT-TYPE PIC X.
05 AS-ADJUSTMENT-AMOUNT PIC S9(5)V99 COMP-3.
*
01 LINE-ITEM-SEGMENT.
05 LIS-ITEM-KEY.
10 LIS-ITEM-KEY-VENDOR PIC X(3).
10 LIS-ITEM-KEY-NUMBER PIC X(3).
05 LIS-UNIT-PRICE PIC S9(5)V99 COMP-
3.
05 LIS-QUANTITY PIC S9(7) COMP-
3.
*
Fig 7.2 Segment Layouts for the Customer Data Base (Part 2 of 2)
Ship-to
Index Target
Index Source
Segment
Segment
Buyer Receivable
Fig 7.3 Secondary Indexing Example in which the Index Source Segment and the Index
Target Segment are the same
Receivable
Customer Buyer
Fig 7.4 Secondary Data Structure for the Secondary Index
Apr 3, 2002 IMS DB Page : 86/132
Secondary Data Structures (contd.)
Fig 7.5 Partial DBDGEN output for the customer data base showing the code to
implement the secondary index
Fig 7.6 DBDGEN output for the Secondary Index Data Base
Buyer Receivable
Index Source
Segment
01 ITEM-SELECTION-SSA.
*
05 FILLER PIC X(9) VALUE ‘CRCUSSEG(’.
05 FILLER PIC X(10) VALUE ‘CRLINXNO =’.
05 SSA-ITEM-KEY-1 PIC X(8).
05 FILLER PIC X VALUE ‘#’.
05 FILLER PIC X(10) VALUE ‘CRLINXNO =’.
05 SSA-ITEM-KEY-2 PIC X(8).
05 FILLER PIC X VALUE ‘)’.
DB2
SEG-1
DB1
PP Physical
Parent
Logical
LP Parent
ons hip
al r elati
c
Logi
SEG-a SEG-b RLC
Real
Logical
Child
C2 VLC
Virtual
Logical
Child
Physical Parent
Original parent of the child
Logical Parent
The parent in the other data base
Bi-directional virtual.
Accesses in both the directions, but the child exists only in
the physical DB.
Bi-directional physical.
Accesses in both the directions, but the child exists both in
the physical DB as well as the logical DB.
******DBD1******
.
.
.
6 SEGM NAME=RLC,
7 PARENT=(PP,PTR), (LP,DBD2),
8 POINTER=(TWIN,LTWIN), RULES=(LLV,LAST),BYTES=16
9 FIELD NAME=********************************
10 FIELD NAME=********************************
.
.
.
******DBD2*******
.
.
.
6 SEGM NAME=LP, PARENT=SEG-1, BYTES=48
7 LCHILD NAME= (RLC,DBD1), POINTER=PTR, PAIR=VLC
8 FIELD NAME=********************************
9 FIELD NAME=********************************
10 FIELD NAME=********************************
.
.
.
Types of checkpointing
Basic checkpointing
Symbolic checkpointing
Basic checkpointing
Simple form of checkpointing.
Issues checkpoint calls that the DL/I recovery utilities use
during recovery processing
Symbolic checkpointing
More advanced type of checkpointing
Used in combination with extended restart
Programs resume from the point following the
checkpoint, in case of a failure
Store program data and CHKP records and retrieve them
at the time of restart
Along with symbolic CHKP call you must use the XRST
(Extended Restart) call too.
Disadvantage:
//IMSLOGR DD DSN=YOUR.IMSRLOG.DATASET,
// DISP=SHR
//*
//IEFRDER DD DSN=YOUR.IEFRDER.DATASET,
// DISP=(,DELETE,DELETE),UNIT=&UNITDA,
// CB=(RECFM=&RECFM,LRECL=&LRECL,
// BLKSIZE=&BLKSIZE), SPACE=&SPACE
//*
//* DD NAMES ARE AS SPECIFIED IN THE DATABASE
//* DBD
//DATA DD DSN=VSAMDB.DATA.PART,DISP=SHR
//INDEX DD DSN=VSAMDB.INDEX.PART,DISP=SHR
//*
//INPUT DD DSN=FILE.USED.FOR.LOADING,
// DISP=SHR
//DFSVSAMP DD DSN=IMSVS.PROCLIB(DFSVSAMP),
// DISP=SHR
//CPXMOPTS DD DSN=PARMLIB.LIBRARY(LOAD),
// DISP=SHR
//CPXMRPTS DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//IMSERR DD SYSOUT=*
//IMSPRINT DD SYSOUT=*
IDENTIFICATION DIVISION.
PROGRAM-ID. PATGET2.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 HOSPITAL-SSA.
05 FILLER PIC X(19) VALUE 'HOSPITAL(HOSPNAME ='.
05 HOSPNAME-SSA PIC X(20).
05 FILLER PIC X VALUE ')'.
01 WARD-SSA.
05 FILLER PIC X(19) VALUE 'WARD (WARDNO ='.
05 WARDNO-SSA PIC X(04).
05 FILLER PIC X VALUE ')'.
01 PATIENT-SSA.
05 FILLER PIC X(19) VALUE 'PATIENT (PATNAME ='.
05 PATNAME-SS PIC X(20).
05 FILLER PIC X VALUE ')'.
01 UNQUAL-HOSPITAL-SSA PIC X(9) VALUE 'HOSPITAL '.
01 UNQUAL-WARD-SSA PIC X(9) VALUE 'WARD '.
01 UNQUAL-PATIENT-SSA PIC X(9) VALUE 'PATIENT '.
01 WS-ISRT PIC X(4) VALUE 'ISRT'.
01 WS-GHU PIC X(4) VALUE 'GHU '.
01 HOSP-I-O-AREA.
05 HOSP-NAME PIC X(20).
05 HOSP-ADDRESS PIC X(30).
05 HOSP-PHONE PIC X(10).
01 Ward-I-O-AREA.
03 WARD-NO PIC X(04).
03 TOT-ROOMS PIC 9(03).
03 TOT-BEDS PIC XXX.
03 BEDAVAIL PIC X(3).
03 WARD-TYPE PIC X(20).
01 PATIENT-I-O-AREA.
03 PATIENT-NAME PIC X(20).
03 PATIENT-ADDRESS PIC X(30).
03 PATIENT-PHONE PIC X(10).
03 BEDINDENT PIC X(4).
03 DATEADMT PIC X(8).
03 PREV-STAY-FLAG PIC X.
LINKAGE SECTION.
01 PCB-MASK.
02 DBD-NAME-1 PIC X(8).
02 SEG-LEVEL-1 PIC XX.
02 STATUS-CODE-1 PIC XX.
02 PROCESS-OPTIONS-1 PIC X(4).
02 KEY-LENGTH PIC S9(5) COMP.
02 SEG-NAME-FDBK-1 PIC X(8).
02 LENGTH-FB-KEY-1 PIC S9(5) COMP.
02 NUMB-SENS-SEGS-1 PIC S9(5) COMP.
02 KEY-FB-AREA-1 PIC X(26).
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING PCB-MASK.
PERFORM INSERT-HOSP-PARA THRU INSERT-HOSP-EXIT.
PERFORM INSERT-WARD-01-PARA THRU
INSERT-WARD-01-EXIT.
PERFORM INSERT-PATIENTS-PARA THRU
INSERT-PATIENTS-EXIT.
GOBACK.
INSERT-HOSP-PARA.
MOVE 'MACNEAL ' TO HOSP-NAME.
MOVE 'ABC DDDD' TO HOSP-ADDRESS.
MOVE '12345' TO HOSP-PHONE.
CALL 'CBLTDLI' USING WS-ISRT
PCB-MASK
HOSP-I-O-AREA
UNQUAL-HOSPITAL-SSA.
INSERT-PATIENTS-EXIT.
EXIT.
Concatenated field
Key formed to access a particular segment
Concatenation of keys of root segment and all successive
children down to the accessed segment
Undefined fields
Fields not defined to IMS
Format determined by the program loading the DB