DL/I에 대한 고려사항 추가

DL/I 컨텍스트에서 add 문을 사용하는 경우, 이 명령문은 단일 세그먼트 또는 세그먼트 세트를 계층 구조 데이터베이스에 추가합니다.

또한 add 문을 사용하여 여러 세그먼트를 DLISegment 레코드의 동적 배열에서 DL/I 데이터베이스에 배치할 수 있습니다.

add 문은 DL/I ISRT 문을 생성합니다. DL/I에서, 이 삽입은 데이터베이스의 현재 위치에 발생합니다. 다음 방법 중 하나로 이 위치 지정을 제어하십시오.
DLISegment 레코드의 동적 배열을 데이터베이스에 추가하려면 다음을 수행하십시오.
  1. DLISegment 레코드의 동적 배열이 루트 세그먼트의 배열이 아닌 경우, 아래에 레코드를 삽입할 상위 세그먼트에 대해 데이터베이스에서의 위치를 설정하십시오.
  2. add 문을 실행하고 DLISegment 레코드의 동적 배열 이름을 지정하십시오. 배열의 각 레코드에 있는 키 값은 데이터베이스에 추가할 새 세그먼트의 논리적 위치를 판별합니다.

구문

DL/I에 대한 add 고려사항의 구문 다이어그램
DLISegmentVariable
DLISegment 변수의 이름입니다.
usingPCB pcbName
기본 PCB 대신 사용하도록 PSB 레코드에 정의된 PCB의 이름을 지정하는 옵션입니다.
with #dli{ dliStatement }
명시적 DL/I ISRT 호출을 작성하는 옵션입니다. #dli 지시문의 내용을 참조하십시오. #dli와 왼쪽 중괄호 사이에 공백을 두지 마십시오.
DLIDynamicArray
DLISegment 레코드로 구성되는 동적 배열의 이름입니다.

경로 호출

또한 DL/I는 add 문에서 경로 호출의 사용을 지원합니다. 경로 호출을 사용하는 경우, 추가하는 중인 최하위 레벨 세그먼트와 루트 사이의 모든 세그먼트 레벨에 대해 상위 세그먼트를 추가할 수 있습니다. 다음 예제에서 DL/I는 새 주문을 추가하면서 동시에 새 고객과 위치를 추가합니다.
add myCustomer, myLocation, myOrder;
EGL은 이 명령문에서 다음 의사 DL/I 코드를 생성합니다.
ISRT STSCCST*D (STQCCNO = :myCustomer.customerNo) 
     STSCLOC (STQCLNO = :myLocation.locationNo) 
     STPCORD

예제

다음 예제는 고객 데이터베이스에 주문을 추가합니다.
// define DLI Segment records using the hostVarQualifier property
Record CustomerRecord type DLISegment
{ segmentName="STSCCST", keyItem="customerNo", hostVarQualifier="myCustomer" }
...
endRecord LocationRecord type DLISegment
{ segmentName="STSCLOC", keyItem="locationNo", hostVarQualifier="myLocation" }
...
endRecord OrderRecord type DLISegment
{ segmentName="STPCORD", keyItem="orderDateNo", hostVarQualifier="myOrder" }
...
end
	//create variables for the records
	myCustomer CustomerRecord;
	myLocation LocationRecord;
	myOrder    OrderRecord;

	//build a segment search parameter
	myCustomer.customerNo = "005001";
	myLocation.locationNo = "000022";

	//fill the fields in the order record
	fillOrder(myOrder);
	
	//add the new order record
	try
		add myOrder;
		onException(dex DLIException)
			myErrorHandler(dex);
	end
add 문은 다음 의사 DL/I 코드를 생성합니다.
ISRT STSCCST (STQCCNO = :myCustomer.customerNo) 
     STSCLOC (STQCLNO = :myLocation.locationNo) 
     STPCORD

고객 및 위치에 대해 규정된 세그먼트 검색 매개변수(SSA)는 새 주문 세그먼트의 상위 세그먼트를 식별합니다. DL/I는 해당 세그먼트 orderDateNo(STQCODN)의 keyItem 필드로 판별된 위치에 새 주문 세그먼트를 추가합니다.

오류 고려사항

"noRecordFound"와 같은 "soft" I/O 오류를 캡처하려면 세트-값 블록을 사용하여 throwNrfEofExceptions 프로그램 특성을 YES로 설정하십시오. onException 블록에서 "is" 또는 "not" 연산자로 오류를 테스트하십시오.
	if (myOrder is unique)
		...
	end
가능한 런타임 오류에는 다음이 포함됩니다.
  • unique - 지정된 키에 대해 주문 세그먼트가 이미 있는 경우(중복이 허용되지 않음)
  • duplicate - 동일한 키의 주문 세그먼트가 있지만 중복이 허용되는 경우