레코드 읽기 및 쓰기

약어 CRUD는 일반적으로 파일 내에서 레코드에 대해 수행하는 기본 I/O 기능을 참조합니다. 다음 표는 해당 기능을 제공하는 CRUD 기능 및 EGL 키워드를 표시합니다.

표 1. EGL의 CRUD 기능
CRUD 기능 EGL 키워드
작성 add
읽기 get
업데이트 replace
삭제 delete

또한 EGL은 사용자가 작업 중인 특정한 유형의 파일에 기반하여 이러한 기능 각각을 실행하는 방법을 사용자 조정합니다. 예를 들어, SQL 데이터베이스에 대해 get next 명령문을 쓰는 경우 EGL이 일련의 SQL 명령문을 생성하여 SQL 결과 세트에서 적합한 행을 찾아서 검색합니다. 순차 파일에 대해 생성된 동일한 EGL 명령문은 간단히 파일에서 다음 레코드를 읽습니다.

EGL은 스테레오타이핑을 통해 이러한 태스크를 수행합니다. 일상 용도에서 스테레오타입은 각각을 특성화하는 데 사용할 수 있는 공통 패턴입니다. 거의 동일한 방법에서 사용자는 레코드에 스테레오타입을 적용하는 경우 해당 레코드와 관련된 I/O 기능을 수행하는 방법에 대해 EGL에 알립니다. 스테레오타입에 대한 자세한 내용은 레코드 파트 소개EGL 언어 참조의 특정 스테레오타입에 초점을 맞춘 추제를 참조하십시오.

I/O 처리 주기

기존 데이터베이스의 경우(일반적으로 데이터베이스 관리자가 작성함), 일반 처리는 대개 작성, 읽기, 업데이트 및 삭제(CRUD) 기능을 포함합니다. 더 구체적인 예제가 특정 데이터 액세스 기술을 다루는 주제에 있습니다. 다음 일반 시나리오가 가능한 유일한 이유는 EGL이 구현 세부사항에서 사용자를 보호하는 데 매우 효율적이기 때문입니다.

레코드를 정의하여 시작하십시오. 이는 임의의 기타 파트 외부에서 수행해야 합니다.
package com.companyb.customer

Record CustomerRecord type Stereotype
  customerNumber INT;
  customerName STRING;
  customerBalance MONEY;
end 		

레코드 및 해당 특성의 세부사항은 계획하는 사용 방법에 따라 다릅니다.

그 다음에 프로그램의 본문 내에서 이 레코드 파트에 기반한 변수를 선언하십시오.
myCustomer CustomerRecord;
기존 고객 레코드를 찾으려면 레코드에 대한 고유한 정보가 필요합니다. 일반적으로 이는 종종 파일에 로 사용되는 일부 ID 번호 종류입니다. 키가 파일을 색인화하는 데 사용되는 데이터이므로 원하는 레코드를 찾는 데 모든 레코드를 볼 필요가 없습니다. 사용자에게 고객 번호를 요청하고 해당 번호를 리턴하는 일명 getCustomer()라는 함수를 별도로 썼다고 가정하십시오.
myCustomer.customerNumber = getCustomer();
요청된 번호와 일치하는 정보를 읽으려면 간단히 다음을 코딩하십시오.
get myCustomer forUpdate;

EGL은 파일 또는 데이터베이스에서 데이터를 읽는 데 적합한 코드를 생성하고 레코드 변수에 정보를 배치합니다. forUpdate 키워드가 데이터에 대해 보류를 배치하도록 EGL에 알리므로 이를 대체하거나 삭제할 옵션이 있습니다.

그런 다음 이를 변경할 옵션과 함께 해당 사용자에게 정보를 제공할 수 있습니다. 사용자가 레코드를 삭제하려는 경우 –1을 리턴하고 레코드가 변경되지 않은 경우 0을 리턴하며 사용자가 레코드를 변경한 경우 1을 리턴하는 일명 showCustomer()라는 함수를 별도로 썼다고 가정하십시오.
case (showCustomer(myCustomer))
  when (-1)
    delete myCustomer;
  when (1)
    replace myCustomer;
end 		
오류를 처리하는 경우(오류 처리 참조) getCustomer()가 리턴하는 수로 좀 더 수행할 수 있습니다. 사용자가 지정된 질문에 Y 또는 N을 응답하는지 여부에 따라 TRUE 또는 FALSE를 리턴하는 일명 getReply()라는 함수를 별도로 썼다고 가정하십시오.
set myCustomer empty;            // all fields blank or 0
myCustomer.customerNumber = getCustomer();   // sets cust #
  
try
  get myCustomer forUpdate;
onException (ex AnyException)      // couldn't get the record
  if(myCustomer is noRecordFound)  // because customer # not on file
    if(getReply("Do you want to add this customer?  (y/n)") == TRUE)
      showCustomer(myCustomer);    // let user fill in remaining fields
      add myCustomer;
    end   else
    myErrorHandler(ex);
end 		

이러한 몇몇 코드 행을 통해 사용자 고유의 VSAM 색인화된 파일 또는 SQL 데이터베이스와 함께 사용할 수 있는 고객 파일 서비스 프로그램의 핵심을 포함합니다. VSAM 및 SQL의 유일한 차이는 CustomerRecord 정의에 적용하는 스테레오타입입니다.