색인 파일 사용

본 장에서는 데이터베이스에 객체를 생성한 후 이를 애플리케이션에서 색인 파일로 사용하는 방법에 대해 기술한다.

1. JCL에서 처리하는 방법

색인 파일을 생성하였으면 이를 애플리케이션에서 사용하기 위해서는 JCL에 해당하는 파일 정보를 기술해야 한다. JCL을 작성할 때는 메타 정보를 지정하기 위해 SYSDBDCT의 FD를 반드시 기술해야 한다. RDBII에서는 SYSDBDCT에 지정한 메타 정보를 이용해서 구성 요소에 대한 정보를 취득한다.

사용할 데이터셋의 이름은 애플리케이션에서 정의한 DD 이름에 기술한다.

\     JOB RDBIITST
\STEP0 EX RDBIITST
\      FD PRGLIB=DA,FILE=SYS1.COBLIB
\      FD SYSDBDCT=DA,FILE=TMAX.RDBII.MDB
\      FD AIMPED=SSI,SUBSYS=(AIM,RDBIITST,AIMAPG0)
\      FD INDD=DA,FILE=TMAX.RDBII.SAMPLE
\      FD SYSOUT=DA,SOUT=T
\      FD SYSDBOUT=DA,SOUT=T
\      FD LIST=DA,SOUT=A

위의 예제에서는 메타 데이터베이스로는 SYSDBDCT에 지정되어 잇는 TMAX.RDBII.MDB를 사용한다는 의미이다. 그리고 RDBIITST라는 프로그램에서 INDD로 TMAX.RDBII.SAMPLE로 정의한 것을 확인할 수 있다.

2. COBOL 프로그램에서 색인 파일 사용

본 절에서는 COBOL 프로그램의 각 DIVISION별 작성 방법에 대해서 설명한다.

2.1. ENVIRONMENT DIVISION 작성 방법

ENVIRONMENT DIVISION에는 JCL에서 사용할 FDNAME(fdname), 파일의 ORANIZATION 정보(INDEXED), KEY(record-key) 등 색인 파일의 정보를 기술한다.

SELECT filename ASSIGN      TO fdname
       ORGANIZATION         IS INDEXED
       ACCESS MODE          IS access-mode
       RECORD KEY           IS record-key
       ALTERNATE KEY        IS alternate-key [WITH DUPLICATES]
       FILE STATUS          IS file-status.
항목 설명

SELECT 절(필수)

애플리케이션에서 사용하는 filename을 지정한다. filename은 OPEN, CLOSE, START, READ 문에서 사용한다.

ASSIGN 절(필수)

애플리케이션에서 사용하는 DD 이름을 지정한다. DD 이름은 애플리케이션과 JCL에서 지정하고 있는 DD 이름과 동일해야 한다.

ORGANIZATION 절(필수)

애플리케이션에서는 색인 파일로 사용하기 때문에 항상 INDEXED로 기술해야 한다. SEQUENTIAL이나 RELATIVE, 혹은 기술하지 않은 경우에는 에러가 발생한다.

ACCESS METHOD 절(옵션)

애플리케이션에서 색인 파일에 대한 접근 방법에 대해 지정한다. 지정하지 않은 경우에는 순차 접근 방식으로 처리한다.

  • SEQUENTIAL : 순차 처리로 수행한다. 레코드의 키나 대체 키로 지정한 순서대로 레코드를 처리한다.

  • RANDOM : 직접 처리를 수행한다. 사용자가 지정한 레코드의 키나 대체 키로 지정한 레코드를 직접 처리한다.

  • DYNAMIC : 순차 또는 직접 처리를 모두 수행한다.

RECORD KEY 절(필수)

데이터베이스를 접근할 때 키가 되는 필드 정보를 지정한다.

레코드의 키로 사용하기 위해서는 해당하는 필드 정보가 미리 인덱스로 생성되어 있어야 한다. 인덱스에 대한 생성은 JYQDDUTY 유틸리티를 이용해서 처리한다.

ALTERNATE KEY 절(옵션)

데이터베이스를 접근할 때 RECORD KEY 이외의 대체 키를 지정한다.

대체 키에는 레코드키와 달리 중복 키 정보가 가능하다. 이 경우에는 WITH DUPLICATES를 지정해야 한다. RECORD KEY와 마찬가지로 해당하는 필드가 미리 인덱스로 생성되어 있어야 한다.

FILE STATUS(옵션)

색인 파일로 처리할 때에 상태 정보를 나타내는 필드이다.

2.2. DATA DIVISION 작성 방법

DATA DIVISION에는 접근하려는 실제 레코드의 정보를 기술한다. 레코드 정보에는 레코드의 키 정보가 반드시 포함되어야 한다.

2.3. PROCEDURE DIVISION 작성 방법

PROCEDURE DIVISION에는 처리하는 색인 파일의 입출력 문장을 기술한다.

OPEN 문

OPEN 문장은 색인 파일을 사용하기 위한 준비 작업이다.

OPEN open_mode filename
항목 설명

open_mode

파일을 OPEN하는 모드를 지정한다.

  • INPUT : 색인 파일을 입력처리 위한 목적으로 OPEN한다.

  • OUTPUT : 색인 파일을 출력처리 위한 목적으로 OPEN한다.

  • I-O : 색인 파일을 입출력을 위한 목적으로 OPEN한다.

RDBII에서는 OUTPUT 모드로 OPEN하더라도, Non-VSAM이나 VSAM과 달리 TRUNCATE 처리하지 않는다.

filename

OPEN할 파일명을 지정한다.

CLOSE 문

CLOSE 문장은 처리가 끝난 파일의 처리를 완료하는 작업이다. CLOSE 처리가 완료된 색인 파일을 READ 등의 처리를 수행하면 에러가 발생한다.

CLOSE filename
항목 설명

filename

CLOSE할 파일명을 지정한다.

READ 문

데이터베이스에서 레코드를 읽어 오는 문장이다. 데이터베이스에서의 레코드의 위치는 START 문장으로 지정이 가능하며, 그렇지 않은 경우에는 순차 접근인 경우에는 첫 번째 레코드부터 읽어 오며, 직접 접근인 경우에는 사용자가 지정한 레코드의 키 값에 해당하는 레코드를 읽어 온다.

READ filename NEXT RECORD INTO identifier exception END-READ.
READ filename RECORD INTO identifier exception END-READ.
항목 설명

filename

READ할 파일명을 지정한다.

NEXT 절

순차 접근 및 동적 접근에서 지정이 가능하다. 현재 위치하고 있는 레코드의 다음 레코드를 읽어 온다. 순차 접근인 경우에는 NEXT를 생략할 수 있다. 동적 접근인 경우 다음 레코드를 읽기 위해서는 반드시 지정해야 한다.

INTO 절

데이터베이스에서 읽어온 레코드를 저장할 버퍼를 지정한다. INTO 절을 지정하지 않더라도 레코드 버퍼에 저장한다.

AT-END 절

순차 접근 및 동적 접근을 처리할 때에 더 이상 순차적으로 처리할 레코드가 없을 때 발생한다.

exception 절

색인 파일을 직접 접근 방식으로 처리한 경우 레코드 키에 해당하는 레코드가 존재하지 않을 때 INVALID-KEY 조건이 발생한다.

WRITE 문

데이터베이스에 새로운 레코드를 추가할 경우에 수행하는 문장이다.

WRITE record-identifier FROM identifier exception END-WRITE.
항목 설명

record-identifier

FILE 섹션에 정의한 레코드의 버퍼가 저장되어 있는 레코드 버퍼를 지정한다.

FROM 절

FILE 섹션으로 정의되지 않은 다른 버퍼의 내용을 저장할 때 지정한다.

exception 절

데이터베이스에 중복된 레코드의 키가 존재하는 경우 INVALID-KEY 조건이 발생한다.

REWRITE 문

데이터베이스에 있는 레코드의 정보를 변경할 때 사용한다. 레코드의 키 값 자체를 변경할 수는 없다. 순차 접근인 경우에는 REWRITE 처리 전에 READ 문장을 수행해야 한다. 직접 접근인 경우에는 READ 문장을 수행하지 않고 레코드 키를 지정해서 레코드에 대한 변경 처리가 가능하다.

REWRITE record-identifier FROM identifier exception END-WRITE.
항목 설명

record-identifier

FILE 섹션에 정의한 레코드의 버퍼가 저장되어 있는 레코드 버퍼를 지정한다.

FROM 절

FILE 섹션으로 정의되지 않은 다른 버퍼의 내용을 저장할 때 지정한다.

exception 절

데이터베이스에 중복된 레코드의 키가 존재하는 경우 INVALID-KEY 조건이 발생한다.

DELETE 문

데이터베이스에 기존에 있는 레코드를 삭제할 경우에 수행하는 문장이다. 순차 접근인 경우에는 DELETE 처리 전에 READ 문장을 수행해야 한다. 직접 접근인 경우에는 READ 문장을 수행하지 않고 레코드 키를 지정해서 삭제 처리가 가능하다.

DELETE filename RECORD exception.
항목 설명

filename

FILE 섹션에 정의한 레코드의 버퍼가 저장되어 있는 레코드 버퍼를 지정한다.

exception 절

데이터베이스에 레코드의 키가 존재하지 않는 경우 INVALID-KEY 조건이 발생한다.

START 문

레코드에 대한 접근할 때 접근하고자 하는 레코드의 위치를 결정하기 위해서 사용한다. START 문장을 사용하면, 지정한 조건에 맞는 첫 번째 레코드에 위치하게 되고, READ를 처리할 때 해당 위치의 레코드를 읽어 오게 된다.

START filename condition excpetion
항목 설명

filename

처리 대상 파일의 이름을 지정한다. 이 파일은 이미 OPEN되어 있어야 한다.

condition

검색 조건을 지정한다. 검색 조건으로 레코드의 키나 대체 키를 지정할 수 있다.

exception 절

사용자가 지정한 검색 조건에 해당하는 레코드가 존재하지 않는 경우 INVALID-KEY 조건이 발생한다.