설치 및 시작하기

본 장에서는 OpenFrame NDB에 대한 구성과 설치를 위한 준비과정과 설치를 위한 환경설정 방법에 대해 기술한다.

1. 구성 및 준비

OpenFrame NDB(Network Database, 이하 NDB)는 Fujitsu Mainframe의 AIM/DB 제품에 대응되는 TmaxSoft의 OpenFrame 제품으로 사용하기 위해서는 시스템적으로 몇 가지 준비사항이 필요하다.

다음은 NDB의 주요 구성요소에 대한 설명이다.

figure 1 1
NDB 구조도
  • NDB Nucleus

    NDB의 중심이 되는 영역이다. 입력 받은 ADL을 분석하거나 NDB 데이터를 처리하고 관련 메모리 버퍼 및 저장 공간 등을 관리하는 기능을 담당한다.

  • 인터페이스

    Fujitsu AIM/DB와 동일한 인터페이스를 제공하여 COBOL, PL/I, C 등의 기존 프로그램을 그대로 사용할 수 있도록 한다.

  • 스키마 정보

    NDB에서 ndbadlgen 툴을 이용하여 스키마의 정보를 토대로 NDB 메타 테이블에 저장하게 된다. ndbadlgen 툴에 대한 자세한 설명은 OpenFrame NDB 시스템 툴 을 참고한다.

2. 디렉터리 구조

OpenFrame AIM 설치가 완료되면 NDB와 관련된 툴, 유틸리티 및 라이브러리 파일들이 제대로 설치되었는지 확인한다.

다음은 NDB와 관련된 툴, 유틸리티 및 라이브러리 파일들이 설치된 위치를 나타내는 OpenFrame 디렉터리 구조이다.

${OPENFRAME_HOME}
|---- bin
|---- cobcopy
      |---- subscpy
|---- config
|---- data
|---- ndb
      |---- lib
      |---- temp
|---- lib
|---- scripts
|---- util
bin

NDB가 제공하는 툴이 저장되는 위치이다. NDB 툴 프로그램은 NDB의 생성, 삭제, 변경 등 NDB 운영에 필요한 기능과 데이터 마이그레이션에 관련된 기능을 제공하여, 시스템 운영자의 작업에 편의성을 높여주는 역할을 한다. 하위에 위치하는 툴에 대한 자세한 설명은 OpenFrame NDB 시스템 툴 을 참고한다.

cobcopy/subscpy

subsc 툴에 의해 만들어진 서브스키마의 copybook이 저장되는 위치이다. subsc 툴에 대한 자세한 설명은 OpenFrame NDB 시스템 툴 을 참고한다.

config

환경설정 파일이 저장되는 위치이다. 하위에 위치하는 환경설정 파일에 대한 자세한 설명은 "OpenFrame 환경설정 안내서"를 참고한다.

data

NDB의 에러코드 파일이 저장된다.

ndb/lib

다음은 하위 디렉터리에 대한 설명이다.

디렉터리 설명

lib

NDB의 각 스키마의 레코드 I/O에 필요한 .so 파일이 저장된다.

temp

ndbmgr schm dmlgen으로 만들어진 각 스키마의 레코드에 따른 .tbc 파일이 저장되는 위치이다. ndbmgr schm dmlgen 툴에 대한 자세한 설명은 OpenFrame NDB 시스템 툴 을 참고한다.

lib

NDB에서 제공되는 라이브러리가 저장되는 위치이다. 다음은 NDB의 라이브러리 및 기능에 대한 설명이다.

라이브러리 설명

libndb.so

NDB 레코드의 조회, 저장, 변경 등의 데이터 입출력 처리와 인덱싱 관리 등의 주요 기능을 제공한다.

libndbcom.so

NDB에서 공통으로 사용하는 기능을 처리한다.

libndbddl.so

NDB 레코드 조회, 저장, 변경 등을 위한 테이블과 인덱스를 생성 및 삭제 처리한다.

libndbdml.so

NDB 레코드의 조회, 저장, 변경, 데이터 입출력 처리 등의 주요 기능을 제공한다.

libndbmeta.so

NDB 데이터베이스를 정의하거나 데이터베이스에 접근하는 애플리케이션의 특성을 기술하는데 사용되는 ADL을 처리하여 메타 데이터를 저장한다.

libndbrstd.so

NDB의 레코드 자원에 RESTRICT와 INHIBIT을 수행해 자원을 폐색하거나 자원이 폐색되어있는지 확인한다.

scripts

NDB의 DML 작업의 I/O를 위해 공통적으로 사용되는 기능을 템플릿의 형태로 해당 경로에 저장되어 제공된다.

util

NDB가 제공하는 유틸리티가 저장되는 위치이다. NDB는 데이터베이스를 구축하고 운영하기 위해 필요한 여러 가지 독립적인 유틸리티들을 제공한다. 이러한 유틸리티 중 NDB 데이터베이스, 인덱스 및 확장 인덱스의 운영을 지원하기 위한 기능들이 제공되는 프로그램을 NDB 유틸리티라고 한다. 하위에 위치하는 유틸리티에 대한 자세한 설명은 OpenFrame NDB 유틸리티 를 참고한다.

3. 시작하기

본 절에서는 NDB를 사용하기 위한 절차 및 방법, 애플리케이션 예제 등을 설명한다. 또한 스키마를 작성하고 NDB 데이터베이스를 생성하는 방법과 애플리케이션을 통한 NDB DML 사용법을 알아본다.

3.1. 데이터베이스 생성 및 삭제

아래의 그림은 NDB 데이터베이스의 생성 절차이다.

figure 1 2
NDB 데이터베이스 생성 절차

3.2. DB 스키마 생성

NDB 데이터베이스를 생성하기 전에 스키마 파일을 작성해야 한다. 스키마 파일은 사용하고자 하는 데이터베이스의 물리적, 논리적 구조와 더불어 레코드 유형, 관련 확장 인덱스 정보 등을 담고 있다.

스키마 파일은 스키마 명령을 사용하여 NDB를 정의한다. 스키마 명령에 대한 자세한 설명과 사용법은 Fujitsu사의 “OS IV AIM ADL REFERENCE MANUAL (V20L10)”을 참고한다.

다음은 생성할 NDB 데이터베이스의 구조를 나타낸 그림이다.

figure 1 3
NDB 데이터베이스 구조도

다음 예제는 위 NDB 데이터베이스 생성을 위한 DB 스키마 파일의 내용이다.

***********************
*    SCHEMA  ENTRY    *
***********************
     SCHEMA    NAME   IS   SCHOOL    FOR   DB
           ;  SCHEMA  GROUP  NAME   IS   SG01
           ;  AUTHOR  IS     RONA
           ;  DATE-WRITTEN   2019.12.05
           ;  REMARKS        CREATE SCHOOL TABLE.
***********************
*    RECORD  ENTRY    *
***********************
     RECORD    NAME                  IS   CLASS1
           ; LOCATION MODE IS INDEX USING CLA-NAME.
           01  CLA-AREA                  ;  PIC   X(2).
           01  CLA-NAME                  ;  PIC   X(30).
           01  CLA-TEL                   ;  PIC   9(10).

     RECORD    NAME                  IS   SUBJECT.
           01  SUB-NAME                  ;  PIC   X(20).
           01  SUB-TEL                   ;  PIC   9(10).

     RECORD    NAME                  IS   TEACHER
           ; LOCATION MODE IS INDEX USING TEA-NAME.
           01  TEA-NAME                  ;  PIC   X(20).
           01  TEA-ED                    ;  PIC   X(2).
           01  TEA-BD                    ;  PIC   9(8).
           01  TEA-NO                    ;  PIC   9(8).

     RECORD    NAME                  IS   STUDENT.
           01  STU-NAME                  ;  PIC   X(20).
           01  STU-BD                    ;  PIC   X(2).

***********************
*    SET     ENTRY    *
***********************
     SET       NAME                  IS   CLASUB
            ;  OWNER                 IS   CLASS1
            ;  MEMBER                IS   SUBJECT LINKED TO PRIOR.

     SET       NAME                  IS   SUBTEA
            ;  OWNER                 IS   SUBJECT
            ;  INSERTION             IS   LAST
            ;  MEMBER                IS   TEACHER LINKED TO PRIOR.

     SET       NAME                  IS   TEASTU
            ;  OWNER                 IS   TEACHER
            ;  MEMBER                IS   STUDENT LINKED TO PRIOR.


***********************
*    RANGE   ENTRY    *
***********************
***********************
*    RANGE   TEARNG   *
***********************
     RANGE     NAME                  IS   TEARNG
            ;  RECORD      NAME      IS   TEACHER
            ;  LOCATION    KEY       IS   TEA-ED
            ;  STRETCHED             BY   4  TIMES
            ;  DIVIDED  RECORD  SIZE IS   512
            ;  RATE                  IS   100
            ;  LOGICAL     PAGE      IS   1
            ;  ALARM       POINT     IS   70     FOR   PRIME.
     SUBRANGE  NAME                  IS   TEASRG0000
            ;  PRIME                 IS   2700
            ;  LOCATION VALUE        IS   '00'   THRU    '09'.

     SUBRANGE  NAME                  IS   TEASRG0001
            ;  PRIME                 IS   2700
            ;  LOCATION VALUE        IS   '10'   THRU  '19'.

***********************
*    RANGE   CLARNG   *
***********************
     RANGE     NAME                  IS   CLARNG
            ;  RECORD      NAME      IS   CLASS1, SUBJECT
            ;  LOCATION    KEY       IS   CLA-AREA
            ;  STRETCHED             BY   4  TIMES
            ;  DIVIDED  RECORD  SIZE IS   512
            ;  RATE                  IS   100
            ;  LOGICAL     PAGE      IS   1
            ;  ALARM       POINT     IS   70     FOR   PRIME.

     SUBRANGE  NAME                  IS   CLASRG0000
            ;  PRIME                 IS   2700
            ;  LOCATION VALUE        IS   '00'    THRU    '09'.

     SUBRANGE  NAME                  IS   CLASRG0001
            ;  PRIME                 IS   2700
            ;  LOCATION VALUE        IS   '10'    THRU    '19'.

***********************
*    RANGE   STURNG   *
***********************
      RANGE     NAME                 IS   STURNG
            ;  RECORD      NAME      IS   STUDENT
            ;  LOCATION    KEY       IS   STU-BD
            ;  STRETCHED             BY   4  TIMES
            ;  LOGICAL     PAGE      IS   1
            ;  ALARM       POINT     IS   70     FOR   PRIME.

     SUBRANGE  NAME                  IS   STUSRG0000
            ;  PRIME                 IS   2700
            ;  LOCATION VALUE        IS   '00'   THRU     '09'.

     SUBRANGE  NAME                  IS   STUSRG0001
            ;  PRIME                 IS   2700
            ;  LOCATION VALUE        IS   '10'   THRU     '19'.

***********************
*    DATASET ENTRY    *
***********************
     DATASET   NAME                  IS   TSDAT.SHCOOL.H01
            ;  PAGE    CONTAINS           32632 .
     VOLUME                          IS   DEFVOL
            ;  UNIT    NAME          IS   F6425
            ;  EXTENT-ID             IS   1
            ;  LOCATE                IS   TEARNG(TEASRG0000).

     DATASET   NAME                  IS   TSDAT.SCHOOL.H02
            ;  PAGE    CONTAINS           32632 .
     VOLUME                          IS   DEFVOL
            ;  UNIT    NAME          IS   F6425
            ;  EXTENT-ID             IS   2
            ;  LOCATE                IS   TEARNG(TEASRG0001).

     DATASET   NAME                  IS   TSDAT.SCHOOL.H03
            ;  PAGE    CONTAINS           32632 .
     VOLUME                          IS   DEFVOL
            ;  UNIT    NAME          IS   F6425
            ;  EXTENT-ID             IS   3
            ;  LOCATE                IS   CLARNG(CLASRG0000).

     DATASET   NAME                  IS   TSDAT.SCHOOL.H04
            ;  PAGE    CONTAINS           32632 .
     VOLUME                          IS   DEFVOL
            ;  UNIT    NAME          IS   F6425
            ;  EXTENT-ID             IS   4
            ;  LOCATE                IS   CLARNG(CLASRG0000).

     DATASET   NAME                  IS   TSDAT.SCHOOL.H05
            ;  PAGE    CONTAINS           32632 .
     VOLUME                          IS   DEFVOL
            ;  UNIT    NAME          IS   F6425
            ;  EXTENT-ID             IS   5
            ;  LOCATE                IS   STURNG(STUSRG0000).

     DATASET   NAME                  IS   TSDAT.SCHOOL.H06
            ;  PAGE    CONTAINS           32632 .
     VOLUME                          IS   DEFVOL
            ;  UNIT    NAME          IS   F6425
            ;  EXTENT-ID             IS   6
            ;  LOCATE                IS   STURNG(STUSRG0001).

*******************************
*    EXTENDED INDEX   ENTRY   *
*******************************
     EXTENDED INDEX NAME  IS  TEAXENT
                   USING   TEA-NO     OF    TEACHER.
END.

위와 같이 작성된 스키마 파일을 스키마 디렉터리에 등록해야 한다.

다음과 같이 UNIX 프롬프트 상에서 ndbadlgen 툴을 실행하면 스키마 파일의 메타 데이터가 메타 테이블에 등록된다.

$ ndbadlgen store -p <schema-file-name>

3.3. XIF 스키마 생성

확장 인덱스를 이용하기 위해서는 아래의 예제와 같은 XIF 스키마 파일을 작성해야 한다. XIF 스키마 생성 방법은 DB 스키마 생성에서 설명한 방법과 동일하다.

************************
* XIFSCHEMA  ENTRY     *
************************
     XIFSCHEMA NAME                  IS   SCHXIF
            ;  SCHEMA      NAME      IS   SCHOOL.
************************
* RECORD   ENTRY       *
************************
     RECORD    NAME                  IS   TEAXENT.
************************
* RANGE    ENTRY       *
************************
     RANGE     NAME                  IS   TEAXRG
            ;  RECORD  NAME          IS   TEAXENT
            ;  LOGICAL PAGE          IS   1
            ;  RATE                  IS   100
            ;  RESIDENT  BLOCK       IS   3   USING  STATIC
            ;  ALARM  POINT          IS   70
            ;  DEGENERATE            IS   10.
*
*           ;  PRIME                 IS   1698.
*

************************
* DATASET  ENTRY       *
************************
     DATASET   NAME                  IS   TSDAT.TSTXIF01.H1
            ;  PAGE    CONTAINS           2932 .
     VOLUME                          IS   DEFVOL
            ;  UNIT                  IS   F6425
            ;  EXTENT-ID             IS   1
            ;  LOCATE                TEAXRG.
     END.

다음과 같이 UNIX 프롬프트 상에서 ndbadlgen 툴을 실행하여 XIF 스키마 등록 작업을 진행한다.

$ ndbadlgen store -p <xif-schema-file-name>

4. 애플리케이션 예제

본 절에서는 생성한 스키마 파일을 기준으로 NDB를 사용하는 COBOL 애플리케이션의 예제를 설명한다.

4.1. 서브스키마 생성

애플리케이션을 사용하기 전에 먼저 사용하기 원하는 대상 NDB 데이터베이스의 레코드와 세트 정보가 담긴 서브스키마를 생성한다.

다음은 서브스키마의 예제이다.

************************
* SUBSCHEMA            *
************************
     SUBSCHEMA NAME         IS     SCHSUB
      ; SCHEMA NAME         IS     SCHOOL.
************************
* RECORD               *
************************
        01  CLASS1.
        01  SUBJECT.
        01  TEACHER.
        01  STUDENT.
************************
* SET                  *
************************
       SET  CLASUB.
       SET  SUBTEA.
       SET  TEASTU.
     END.

서브스키마 생성 방법은 다음과 같다.

$ ndbadlgen store -p <sub-schema-file-name>

애플리케이션을 실행하기 전에 프로그램 실행 환경에 대해 기술한 PED 파일을 아래와 같이 작성하여 등록한다. 각 애플리케이션을 위한 PED 파일의 등록은 jxdddms 툴을 이용한다.

$ jxdddms store -p <ped-file-name>
 *******************
 * PED       ENTRY *
 *******************
    PED          NAME          IS   CLARNGCR
       ; SWAP           POINT  IS   NOTHING.
 *******************
 * AP        ENTRY *
 *******************
      AP         NAME          IS   CLACOB
       ; TRANSACTION-POINT     IS   SYSTEM .
 *******************
 * DATABASE  ENTRY *
 *******************
      DATABASE   NAME          IS   SCHSUB
       ; ACCESS  MODE          IS
                 UPDATE         FOR  SCHOOL
       ; PAGE           BUFFER IS   10
       ; INDEX          BUFFER IS   10
       ; EXTENDED INDEX BUFFER IS   10
       ; INCLUSION    SCHEMA   IS   SCHOOL
       ; EXCLUSIVE    UNIT     IS   RANGE.
 *
     END.

4.2. CLARNG RANGE에 데이터 생성

다음은 CLARNG RANGE에 데이터를 생성하는 COBOL 애플리케이션 예제로 NDB 데이터베이스의 CLASS1 레코드와 SUBJECT 레코드에 값을 저장한다. NDB를 사용하기 위해서는 먼저 READY 명령과 함께 서브스키마 이름을 명시하여 데이터 조작을 준비하고 STORE 명령으로 실제 데이터를 저장한다. NDB 사용이 종료되면 FINISH 명령으로 NDB 처리를 종료한다.

 IDENTIFICATION DIVISION.
 PROGRAM-ID. 'CLACOB'.
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
 SOURCE-COMPUTER .
     FACOM .
 OBJECT-COMPUTER .
     FACOM .
 SUBSCHEMA-NAME.
     'SCHSUB'.
 DATA DIVISION.
*----------------------------------------------------------------*
 WORKING-STORAGE SECTION.
*----------------------------------------------------------------*
 01  WK-EOF-FLG                   PIC X(01) VALUE SPACE.
*----------------------------------------------------------------*
 PROCEDURE DIVISION.
*----------------------------------------------------------------*
*    MAIN CONTROL                                                *
*----------------------------------------------------------------*
 MAIN-CONTROL-PROC SECTION.
      READY.
         MOVE "01" TO CLA-AREA OF CLASS1.
         MOVE "EXERCISE" TO CLA-NAME OF CLASS1.
         MOVE 01012345678 TO CLA-TEL OF CLASS1.
         STORE 'CLASS1'.
     DISPLAY 'CLA-AREA :' CLA-AREA OF CLASS1.
     DISPLAY 'CLA-NAME :' CLA-NAME OF CLASS1.
     DISPLAY 'CLA-TEL :' CLA-TEL OF CLASS1.
     DISPLAY 'STORE DBECB :' DBECB OF FCOM.
         MOVE "YOGA" TO SUB-NAME OF SUBJECT.
         MOVE 01012345678 TO SUB-TEL OF SUBJECT.
         STORE 'SUBJECT'.
     DISPLAY 'CLA-AREA :' CLA-AREA OF CLASS1.
     DISPLAY 'CLA-NAME :' CLA-NAME OF CLASS1.
     DISPLAY 'CLA-TEL :' CLA-TEL OF CLASS1.
     DISPLAY 'STORE DBECB :' DBECB OF FCOM.
         FINISH.
     MAIN-CONTROL-EXIT.
     DISPLAY '*** CLARNGCOB END ***'.

4.3. TEARNG RANGE에 데이터 생성

다음은 TEARNG RANGE에 데이터를 생성하는 애플리케이션에서 사용하는 PED 파일 예제이다.

*******************
* PED       ENTRY *
*******************
   PED          NAME          IS   TEARNGCR
      ; SWAP           POINT  IS   NOTHING.
*******************
* AP        ENTRY *
*******************
     AP         NAME          IS   TEACOB
      ; TRANSACTION-POINT     IS   SYSTEM .
*******************
* DATABASE  ENTRY *
*******************
     DATABASE   NAME          IS   SCHSUB
      ; ACCESS  MODE          IS
                UPDATE         FOR  SCHOOL
      ; PAGE           BUFFER IS   10
      ; INDEX          BUFFER IS   10
      ; EXTENDED INDEX BUFFER IS   10
      ; INCLUSION    SCHEMA   IS   SCHOOL
      ; EXCLUSIVE    UNIT     IS   RANGE.
*
    END.

다음은 TEARNG RANGE에 데이터를 생성하는 COBOL 애플리케이션의 예제로 INPUT 파일에서 데이터를 읽어 NDB 데이터베이스의 TEACHER 레코드에 저장한다.

<TEACOB.jcl>

//TEARNG   JOB CLASS=A,MSGCLASS=A
//*--------------------------------------------------------------------*
//DBTST    EXEC PGM=TEACOB,TIME=(,30)
//STEPLIB  DD DSN=SYS1.USERLIB,DISP=SHR
//AIMPED   DD SUBSYS=(AIM,TEARNGCR,APG01,00),DISP=SHR
//SYSOUT   DD SYSOUT=*
//SSYSIN   DD DSN=TEARNG.INFILE,DISP=SHR
//SSYSOUT  DD SYSOUT=*
//

<TEARNG.INFILE>

RONANAM             021993021403

<TEACOB.COBOL>

IDENTIFICATION DIVISION.
PROGRAM-ID. 'TEACOB'.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SUBSCHEMA-NAME.  'SCHSUB'.
SOURCE-COMPUTER .
    FACOM .
OBJECT-COMPUTER .
   FACOM .
 INPUT-OUTPUT SECTION.
 FILE-CONTROL.
    SELECT IN-FILE ASSIGN TO SSYSIN.
DATA               DIVISION.
FILE               SECTION.
     FD    IN-FILE.
     01    IN-DATA.
     02  IN-TEANAME   PIC X(20).
     02  IN-TEAED     PIC X(2).
     02  IN-TEABD     PIC 9(8).
     02  IN-TEANO     PIC 9(8).

WORKING-STORAGE   SECTION.

PROCEDURE          DIVISION.
OPEN   INPUT    IN-FILE.

MAIN-CONTROL-PROC SECTION.
   READY 'SCHSUB'.
   READ   IN-FILE.
   MOVE   IN-DATA TO TEACHER.
   STORE 'TEACHER'
   FINISH.
   CLOSE IN-FILE.

4.4. STURNG RANGE에 데이터 생성

다음은 STURNG RANGE에 데이터를 생성하는 애플리케이션에서 사용하는 PED 파일의 예제이다.

*******************
* PED       ENTRY *
*******************
   PED          NAME          IS   STURNGCR
      ; SWAP           POINT  IS   NOTHING.
*******************
* AP        ENTRY *
*******************
     AP         NAME          IS   STUCOB
      ; TRANSACTION-POINT     IS   SYSTEM .
*******************
* DATABASE  ENTRY *
*******************
     DATABASE   NAME          IS   SCHSUB
      ; ACCESS  MODE          IS
                UPDATE         FOR  SCHOOL
      ; PAGE           BUFFER IS   10
      ; INDEX          BUFFER IS   10
      ; EXTENDED INDEX BUFFER IS   10
      ; INCLUSION    SCHEMA   IS   SCHOOL
      ; EXCLUSIVE    UNIT     IS   RANGE.
*
    END.

다음은 STURNG RANGE의 데이터를 생성하는 COBOL 애플리케이션의 예제로 INPUT 파일에서 데이터를 읽어 IN-ID가 'T’인 경우 TEACHER 레코드에서 검색하고, 'T’가 아닌 경우는 NDB 데이터베이스의 STUDENT 레코드에 저장한다.

<STUCOB.jcl>

//STURNG   JOB CLASS=A,MSGCLASS=A
//*--------------------------------------------------------------------*
//DBTST    EXEC PGM=STUCOB,TIME=(,30)
//STEPLIB  DD DSN=SYS1.USERLIB,DISP=SHR
//AIMPED   DD SUBSYS=(AIM,STURNGCR,APG01,00),DISP=SHR
//SYSOUT   DD SYSOUT=*
//SSYSIN   DD DSN=STURNG.INFILE,DISP=SHR
//SSYSOUT  DD SYSOUT=*
//

<STURNG.INFILE>

TRONANAM             02

<STUCOB.COBOL>

IDENTIFICATION DIVISION.
PROGRAM-ID. 'STUCOB'.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SUBSCHEMA-NAME.  'SCHSUB'.
SOURCE-COMPUTER .
    FACOM .
OBJECT-COMPUTER .
   FACOM .
 INPUT-OUTPUT SECTION.
 FILE-CONTROL.
    SELECT IN-FILE ASSIGN TO SSYSIN.
DATA               DIVISION.
FILE               SECTION.
     FD    IN-FILE.
     01    IN-DATA.
     02  IN-ID            PIC X(1).
     02  IN-TEACHER.
         03  IN-TEA-NAME  PIC X(20).
         03  IN-TEA-ED    PIC X(2).
     02 IN-STU REDEFINES IN-TEACHER.
         03  IN-STU-NAME  PIC X(20).
         03  IN-STU-BD    PIC X(2).

WORKING-STORAGE   SECTION.

PROCEDURE          DIVISION.
OPEN   INPUT    IN-FILE.

MAIN-CONTROL-PROC SECTION.
READY 'SCHSUB'.
READ-DATA.
     READ   IN-FILE AT END GO TO END-APP.
     IF IN-ID NOT = 'T' GO TO ST-STU.
GT-TEA.
     DISPLAY 'IN-TEA-NAME :' IN-TEA-NAME.
     DISPLAY 'IN-TEA-ED :' IN-TEA-ED.

     MOVE IN-TEA-NAME TO TEA-NAME OF TEACHER.
     MOVE IN-TEA-ED   TO TEA-ED OF TEACHER.
     FIND ANY 'TEACHER'.
     GO TO READ-DATA.
ST-STU.
     MOVE IN-STU TO STUDENT.
     STORE 'STUDENT'.
     GO TO READ-DATA.
END-APP.
     FINISH.
     CLOSE   IN-FILE.
     STOP    RUN.