예제 DL/I 데이터베이스
일관된 예제를 제공하고 각 예제를 다른 예제에 빌드하기 위해 이 문서에서는 가능한 동일한 예제 DL/I 데이터베이스를 사용합니다. 이 고객 데이터베이스에는 루트 레벨의 기본 고객 정보가 있습니다. 각 고객에 대해 신용 상태, 히스토리, 개인 위치의 세그먼트가 있습니다. 각 위치에는 주문 세그먼트가 있고 각 주문에는 항목 세그먼트가 있습니다.
데이터베이스 레이아웃
다음 데이터베이스는 CUSTOMER로 이름 지정됩니다.

다음 세부사항은 예제 데이터베이스를 참조합니다.
- 위치 세그먼트의 위치 번호는 각 고객마다 고유합니다.
- 주문 세그먼트는 논리적 관계로 연결된 두 세그먼트의 데이터를 포함하는 연결 세그먼트입니다. 항목 설명, 보유 수량, 주문 수량, 예약 수량, 단가, 발행 단위는 실제적으로 별도의 인벤토리 데이터베이스에 모두 저장됩니다. 프로그램의 관점에서 보면 두 세그먼트 간의 논리적 관계 때문에 이 정보는 주문 항목 세그먼트의 파트였던 것처럼 보입니다.
- 고객당 대변 세그먼트는 하나만 있으므로 키 필드가 필요하지 않습니다.
- 히스토리 세그먼트는 변수 길이 세그먼트입니다.
EGL DLISegment 레코드
EGL은 프로그램의 각 세그먼트를 DLISegment 유형의
레코드로 나타냅니다. 다음 코드 샘플은 EGL에서
이 데이터베이스 구조를 정의할 수 있는 방법을 표시합니다.
또한 진행에 따라 세그먼트 및
필드 이름(최대 8자)의 DL/I 버전을 사용하는 DL/I 호출의
예제를 표시합니다. 해당 DL/I 이름은 예제에도 표시됩니다.
//define records to match segments in DL/I db
Record CustomerRecordPart type DLISegment
{ segmentName="STSCCST", keyItem="customerNo" }
10 customerNo char(6) { dliFieldName = "STQCCNO" }; //key field
10 customerName char(25) { dliFieldName = "STUCCNM" };
10 customerAddr1 char(25) { dliFieldName = "STQCCA1" };
10 customerAddr2 char(25) { dliFieldName = "STQCCA2" };
10 customerAddr3 char(25) { dliFieldName = "STQCCA3" };
end
Record LocationRecordPart type DLISegment
{ segmentName="STSCLOC", keyItem="locationNo" }
10 locationNo char(6) { dliFieldName = "STQCLNO" }; //key field
10 locationName char(25) { dliFieldName = "STFCLNM" };
10 locationAddr1 char(25) { dliFieldName = "STFCLA1" };
10 locationAddr2 char(25) { dliFieldName = "STFCLA2" };
10 locationAddr3 char(25) { dliFieldName = "STFCLA3" };
end
Record OrderRecordPart type DLISegment
{ segmentName="STPCORD", keyItem="orderDateNo" }
10 orderDateNo char(12) { dliFieldName = "STQCODN" }; //key field
10 orderReference char(25) { dliFieldName = "STFCORF" };
10 orderItemCount num(6) { dliFieldName = "STFCOIC" };
10 orderAmount decimal(12,2) { dliFieldName = "STFCOAM" };
end
Record ItemRecordPart type DLISegment
{ segmentName="STLCITM", keyItem="itemKey" }
10 itemKey char(8); { dliFieldName = "STKCCKEY" }; //key field
15 itemInventoryNo char(6) { dliFieldName = "STKCIIN" };
15 itemLineNo smallint { dliFieldName = "STQCILI" };
10 itemQtyOrdered num(6) { dliFieldName = "STFCIQO" };
10 itemQtyShipped num(6) { dliFieldName = "STFCIQS" };
10 itemQtyBackOrdered num(6) { dliFieldName = "STFCIQB" };
10 itemAmount decimal(12,2) { dliFieldName = "STFCIAM" };
10 itemNumber char(6) { dliFieldName = "STQIINO" };
10 itemDescription char(25) { dliFieldName = "STFIIDS" };
10 itemQtyOnHand num(6) { dliFieldName = "STFIIQH" };
10 itemQtyOnOrder num(6) { dliFieldName = "STFIIOH" };
10 itemQtyReserved num(6) { dliFieldName = "STFIIQR" };
10 itemUnitPrice char(6) { dliFieldName = "STFIIPR" };
10 itemUnitOfIssue char(1) { dliFieldName = "STFIIUN" };
end
Record CreditRecordPart type DLISegment
{ segmentName="STSCSTA" }
10 creditLimit decimal(12,2) { dliFieldName = "STFCSCL" };
10 creditBalance decimal(12,2) { dliFieldName = "STFCSBL" };
end
Record HistoryRecordPart type DLISegment
{ segmentName="STSCHIS", lengthItem="historySegmentLength",
keyItem="historyDateNo" }
10 historySegmentLength smallint { dliFieldName = "STGCSL" };
10 historyDateNo char(12) { dliFieldName = "STQCHDN" };
10 historyReference char(25) { dliFieldName = "STFCHRF" };
10 historyItemCount smallint { dliFieldName = "STFCHIC" };
10 historyAmount decimal(12,2) { dliFieldName = "STQCHAM" };
10 historyStatus char(77) { dliFieldName = "STQCLOS" };
end
IMS PSB
호스트의 다음 PSB 정의에서 DBDNAME은 데이터베이스의 이름인
CUSTOMER로 설정됩니다. PCB는 이름 STDCDBL로 정의되며
다음 섹션의 customerPCB는 pcbName 특성을
이 이름으로 설정합니다.
TITLE 'PSB FOR PROCESSING SAMPLE DATA BASES'
ELAALT PCB TYPE=TP,MODIFY=YES
ELAEXP PCB TYPE=TP,MODIFY=YES,EXPRESS=YES
STDCDBL PCB TYPE=DB,DBDNAME=CUSTOMER,PROCOPT=AP,KEYLEN=50,POS=S
SENSEG NAME=STSCCST,PARENT=0
SENSEG NAME=STSCLOC,PARENT=STSCCST
SENSEG NAME=STPCORD,PARENT=STSCLOC
SENSEG NAME=STLCITM,PARENT=STPCORD
SENSEG NAME=STSCSTA,PARENT=STSCCST
SENSEG NAME=STSCHIS,PARENT=STSCCST
PSBGEN LANG=ASSEM,CMPAT=YES,PSBNAME=STBICLG
END
EGL PSBRecord
다음 코드는 EGL 프로그램에서 IMS™ PSB를
나타냅니다.
//define overall db layout in PSB
Record CustomerPSBRecordPart type PSBRecord { defaultPSBName="STBICLG" }
// three PCBs required for CBLTDLI on IMS
iopcb IO_PCBRecord { @PCB { pcbType = PCBKind.TP } };
elaalt ALT_PCBRecord { @PCB { pcbType = PCBKind.TP } };
elaexp ALT_PCBRecord { @PCB { pcbType = PCBKind.TP } };
// database PCB
customerPCB DB_PCBRecord { @PCB {
pcbType = DB,
pcbName = "STDCDBL",
hierarchy = [
@relationship { segmentRecord = "CustomerRecordPart" },
@relationship {
segmentRecord = "LocationRecordPart", parentRecord = "CustomerRecordPart" },
@relationship {
segmentRecord = "OrderRecordPart", parentRecord = "LocationRecordPart" },
@relationship {
segmentRecord = "ItemRecordPart", parentRecord = "OrderRecordPart" },
@relationship {
segmentRecord = "CreditRecordPart", parentRecord = "CustomerRecordPart" },
@relationship {
segmentRecord = "HistoryRecordPart", parentRecord = "CustomerRecordPart" }]}};
end
샘플 EGL 프로그램
다음 프로그램 아웃라인은 CUSTOMER 데이터베이스를 사용하도록 설정됩니다.
program PrintCatalog type basicProgram { alias="PRINT",
@DLI{
psb = "myPSB",
callInterface = CBLTDLI } }
//create variables for the records
myCustomer CustomerRecordPart;
myLocation LocationRecordPart;
myOrder OrderRecordPart;
myItem ItemRecordPart;
myCrStatus CreditRecordPart
myHistory HistoryRecordPart
myPSB CustomerPSBRecordPart;
function main()
...
endend