DB2 및 COBOL 생성에 대한 엑시트 작성
이 주제에서는 "DB2®의 EGL 액세스에 대한 엑시트 작성"을 확장하며, 이 내용은 COBOL 생성에만 적용됩니다.
소스 코드
전달되는 엑시트에 대한 소스를 확인하려면 z/OS® 기반 z/Series용 Rational® COBOL Runtime 설치에 포함되어 있는 SELASAMP PDS의 멤버를 검토하십시오. 다음 표에는 해당 멤버가 나열되어 있습니다.
| 멤버 이름 | 용도 | 입력 및 출력 유형 |
|---|---|---|
| ELADT2DB | 데이터베이스 입력 전에, 유형이 DATE인 호스트 변수로부터 데이터베이스에 지정될 값을 수정합니다. | CHAR(10)에 대한 포인터 |
| ELADT2PG | 데이터베이스 입력 후에, 유형이 DATE인 호스트 변수에 삽입될 값을 수정합니다. | CHAR(10)에 대한 포인터 |
| ELATI2DB | 데이터베이스 입력 전에, 유형이 TIME인 호스트 변수로부터 데이터베이스에 지정될 값을 수정합니다. | CHAR(8)에 대한 포인터 |
| ELATI2PG | 데이터베이스 입력 후에, 유형이 TIME인 호스트 변수에 삽입될 값을 수정합니다. | CHAR(8)에 대한 포인터 |
| ELATS2DB | 데이터베이스 입력 전에, 유형이 TIMESTAMP인 호스트 변수로부터 데이터베이스에 지정될 값을 수정합니다. | CHAR(26)에 대한 포인터 |
| ELATS2PG | 데이터베이스 입력 후에, 유형이 TIMESTAMP인 호스트 변수에 삽입될 값을 수정합니다. | CHAR(26)에 대한 포인터 |
날짜, 시간 및 시간소인에 설정하는 마스크는 이러한 엑시트와의 사이에서 전송되거나 수신되는 데이터에 영향을 주지 않습니다. StrLib.defaultDateFormat, StrLib.defaultTimeFormat 및 StrLib.defaultTimeStampFormat 함수를 설정하여 코드에 마스크를 설정할 수 있으며, 이들 함수는 이름이 같은 빌드 디스크립터 옵션으로부터 기본값을 수신할 수 있습니다.
예제 및 로직 플로우
다음 SQL문은 두 개의 문자 필드를 사용하며, 각 필드에는 관련된 열의 유형이 DATE임을 나타내는 sqlDataCode 값이 있습니다.
get myrec with #sql{
SELECT COL1 FROM TBL WHERE :dateChar1 = '2010-04-01' }
into dateChar2;
조회는 다음과 같이 생성됩니다.
- dateChar1 필드의 값을 가져옵니다.
- 이 값을 ELADT2DB 엑시트 프로그램에 전달합니다.
- 데이터베이스와 상호작용할 때, 이 엑시트 프로그램으로부터 리턴된 새 날짜 값을 사용합니다.
다음 내용은 예제 데이터를 페치할 때의 이벤트입니다.
- COL1의 값을 데이터베이스에서 가져옵니다.
- 이 값을 ELADT2PG 프로그램에 전달합니다.
- 이 프로그램에서 리턴된 값을 dateChar2 필드에 지정합니다.
로드 모듈
전달되는 로드 모듈은 z/OS 기반 z/Series용 Rational COBOL Runtime 설치에 포함되어 있는 SELALMD PDS의 멤버입니다.
이러한 엑시트를 사용하도록 설정하면 EGL 생성기는 이러한 각 필수 엑시트에 대해 링크 편집 제어 카드에 INCLUDE SELALMD(exitpgm) 문을 생성합니다.
- 이 엑시트를 수정하지 않으면 샘플 엑시트가 링크되어 실행됩니다. 이들은 값을 수정하지 않습니다.
- 엑시트를 수정하여 이를 새 데이터 세트에 삽입하는 경우에는 빌드 스크립트의 링크-편집 단계에서 새 데이터 세트를 참조해야 합니다. 구체적으로는 전달된 JCL의 항목 이전에 있는 SELALMD DD 문에 참조를 추가해야 합니다.
- 수정된 엑시트가 이후에 변경되는 경우에는 변경사항을 적용하려면 프로그램을 다시 생성하거나 다시 링크해야 합니다.