Ejemplo de base de datos DL/I

Para proporcionar una experiencia coherente y permitir que cada ejemplo se construya en otros, en esta documentación se utiliza la base de datos DL/I de ejemplo siempre que es posible. Esta base de datos de cliente contiene información básica de cliente en el nivel raíz. Para cada cliente hay segmentos para el estado de crédito, historial y ubicaciones individuales. Cada ubicación tiene segmentos de pedido, y cada pedido tiene segmentos de elementos de línea.
Diagrama de la base de datos de clientes
EGL representa cada uno de estos segmentos e el programa en forma de registros de tipo DLISegment. El ejemplo de código que sigue muestra cómo declarar esta estructura de base de datos en EGL. De vez en cuando también se mostrarán ejemplo de llamadas DL/I utilizando versiones de DL/I de nombres de segmentos y campos (8 caracteres como máximo). Esos nombres DL/I también se muestran en el ejemplo.
package customer;

//definir registros que coincidan con segmentos en la bd DL/I
Record CustomerRecordPart type DLISegment 
{ segmentName="STSCCST", keyItem="customerNo" }
	10 customerNo char(6)      { dliFieldName = "STQCCNO" };  //campo de clave
	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" };  //campo de clave
	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" };  //campo de clave
	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);            //campo de clave
		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 = "STFIIQH" };
	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 char(12)      { dliFieldName = "STFCSCL" };
	10 creditBalance char(12)    { 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

//declarar diseño global de bd en el PSB
Record CustomerPSBRecordPart type PSBRecord { defaultPSBName="STBICLG" }
	// tres PCB necesarios para CBLTDLI en IMS
	iopcb IO_PCBRecord { @PCB { pcbType = TP } };
	elaalt ALT_PCBRecord { @PCB { pcbType = TP } };
	elaexp ALT_PCBRecord { @PCB { pcbType = TP } };
	
	// PCB de base de datos
	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

program PrintCatalog type basicProgram { 
	@DLI{ 		
		psb = "myPSB", 		
		callInterface = CBLTDLI, 		
		// dejar espacio para los PCB de E/S y ALT
		pcbParms = ["", "", "", "customerPCB"] 	} }

	//crear instancias de los registros
	myCustomer  CustomerRecordPart;
	myLocation  LocationRecordPart;
	myOrder     OrderRecordPart;
	myItem      ItemRecordPart;
	myCrStatus  CreditRecordPart
	myHistory   HistoryRecordPart

	myPSB       CustomerPSBRecordPart; 

	function main()
	...
	end
end

Conceptos relacionados:
Conceptos básicos de base de datos DL/I
Soporte de bases de datos DL/I
Tipos de registros y propiedades
Consulta relacionada:
@DLI

Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.