#dli 지시문
#dli 지시문을 사용하여 EGL이 I/O 키워드에서 생성하는 기본 DL/I 호출을 수정할 수 있습니다.
다음 예제와 같이 수정한 EGL 코드와 같은 행에 지시문을 배치하고 필요에 따라 추가 행을 계속 진행하십시오.
get myLocation with #dli{
GU STSCCST (STQCCNO = :myCustomer.customerNo)
STSCLOC (STQCLNO = :myLocation.locationNo) };
위 예제의 구문은 DL/I의 구문과 똑같지는 않습니다. EGL은 사용자를 위해 몇 가지 DL/I 포맷팅을 수행하는 강력한 의사 DL/I 구문을 지원합니다. 예를 들어, EGL은 모든 이름을 대문자로 변환하고, 필요한 경우 이름에 공백을 추가하여 8자로 만들고, "!="과 같은 EGL 관계형 연산자를 해당 DL/I 연산자로 변환합니다. 또한 EGL은 사용자의 pseudo-DL/I 호출에서 호스트 변수(호스트 EGL 프로그램에는 정의되고 DL/I 데이터베이스에는 정의되지 않은 변수)를 허용합니다. 위 샘플 코드에서 호스트 변수는 콜론(:)으로 시작합니다. 생성 시 EGL은 이러한 원시 자료를 적절하게 형식화된 DL/I 호출로 전환합니다.
다음과 같은 환경에서 #dli 지시문을 사용할 수 있습니다.
- DL/I 명령 코드를 추가하여 호출 기능을 확장하는 경우. 연결 키 사용(*C) 또는 재배치 시 경로 호출의 세그먼트 제외(*N)가 이러한 예제에 포함됩니다.
- 동적 배열을 피연산자로 사용하여 get 또는 get
next 호출을 수행하는 경우. get을 사용하여
동적 배열을 채우려면 초기 GU 호출 후 배열이 가득 차거나 DL/I에서 세그먼트 발생이 없을 때까지
GN 호출이 계속 이어져야 합니다. 배열 자체에는 키 필드가 없으므로(배열 멤버에만 있음) EGL이 생성하는
기본 DL/I 코드는 작동하지 않습니다. 다음 예제와 유사한 코드를 작성해야 합니다.
myOrderArray OrderRecordPart[] {maxsize = 20}; //array of orders get myOrderArray with #dli{ GU STSCCST STSCLOC STPCORD GN STPCORD }; //get the next 20 orders get next myOrderArray; - 키가 아닌 필드 또는 세그먼트 자체에 없는 값을 기반으로 세그먼트를 검색하는 경우.
- 세그먼트 유형에 관계없이 데이터베이스에서 모든 세그먼트를 읽는 경우. 이 작업에는 SSA가 없는 GN이 필요합니다.