DL/I에 대한 고려사항 추가
DL/I 컨텍스트에서 add 문을 사용하는 경우, 이 명령문은 단일 세그먼트 또는 세그먼트 세트를 계층 구조 데이터베이스에 추가합니다.
또한 add 문을 사용하여 여러 세그먼트를 DLISegment 레코드의 동적 배열에서 DL/I 데이터베이스에 배치할 수 있습니다.
add 문은 DL/I ISRT 문을 생성합니다. DL/I에서, 이 삽입은 데이터베이스의 현재 위치에 발생합니다. 다음 방법 중 하나로
이 위치 지정을 제어하십시오.
- EGL 프로그램에서 명시적으로 키 설정(이 주제의 "예제" 참조)
- get 문 사용(DL/I에 대한 get 고려사항 참조)
- #dli 지시문을 통해 규정된 SSA 작성(#dli 지시문 참조)
DLISegment 레코드의 동적 배열을 데이터베이스에 추가하려면 다음을 수행하십시오.
- DLISegment 레코드의 동적 배열이 루트 세그먼트의 배열이 아닌 경우, 아래에 레코드를 삽입할 상위 세그먼트에 대해 데이터베이스에서의 위치를 설정하십시오.
- add 문을 실행하고 DLISegment 레코드의 동적 배열 이름을 지정하십시오. 배열의 각 레코드에 있는 키 값은 데이터베이스에 추가할 새 세그먼트의 논리적 위치를 판별합니다.
구문

- 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 - 동일한 키의 주문 세그먼트가 있지만 중복이 허용되는 경우