1. WRITE

WRITE statement는 레코드를 출력 파일에 write한다 .

Sequential file은 반드시 OUTPUT 또는 EXTEND mode로 OPEN되어 있어야 한다.

Indexed file이나 relative 파일은 반드시 OUTPUT, I-O, 또는 EXTEND mode로 OPEN되어 있어야 한다.

  • Format 1

    figure pd write format1 sequential files
    WRITE Statement Format 1
    figure pd write format1 phrase1
    WRITE Statement Format 1 : phrase
    figure pd write format1 invalid key
    WRITE Statement Format 1 : invalid_key
    figure pd write format1 not invalid key
    WRITE Statement Format 1 : not_invalid_key
  • Format 2

    figure pd write format2 indexed and relative files
    WRITE Statement Format 2
  • Format 3

    figure pd write format3 line sequential files
    WRITE Statement Format 3

다음은 statement의 각 설정 항목에 대한 설명이다.

  • record-name-1

    • 반드시 data vision FD entry에 기술되어 있어야 한다.

    • record-name-1은 qualified될 수 있다. sort/merge 파일과 연관되어서는 안된다.

  • FROM phrase

    • FROM phrase를 가진 WRITE statement의 실행 결과는 다음 두 문장을 실행시킨것과 같다.

      MOVE identifier-1 TO record-name-1.
      WRITE record-name-1.
  • identifier-1

    • identifier-1은 다음 중 하나를 참조한다.

      • working-storage section, local-storage section 또는 linkage section의 entry

      • 이미 open된 다른 파일의 record description

      • alphanumeric function.

    • identifier-1은 MOVE statement의 규칙에 따라 record-name-1이 receiving 항목이 될 수 있는 유효한 sending 항목이어야 한다.

    • identifier-1과 record-name-1은 같은 저장 공간을 참조해서는 안된다.WRITE statement의 실행후, identifier-1의 정보는 여전히 유효하다.

  • identifier-2

    반드시 integer 데이터 항목이어야 한다.

  • ADVACING phrases

    ADVANCING phrase는 출력 레코드의 페이지 위치를 조정한다.

    • ADVANCING phrase rules

      ADVANCING phrase가 기술되면 다음의 규칙을 따른다.

      • BEFORE ADVANCING이 기술되면 line이 먼저 찍히고 페이지가 진행된다.

      • AFTER ADVANCING이 기술되면 페이지가 진행되고 line이 찍힌다.

      • identifier-2가 기술되어 있으면, 페이지는 identifier-2의 값에 해당라인 만큼 진행한다. identifier-2는 integer data item이어야 한다.

      • integer-1이 기술되어 있으면, 페이지는 integer-1 값에 해당하는 라인 수만큼 진행된다.

      • integer-1 또는 identifier-2의 값은 0가 될 수 있다.

      • PAGE가 기술되어 있다면, 다음 논리적 페이지로 진행되기 전,후 (AFTER, BEFORE phrase에 따라)에 레코드가 찍힌다.

      • mnemonic-name이 기술되면, 채널 1~12까지 건너뛰거나 space supression이 일어난다. mnemonic-name은 SPECIAL-NAMES paragraph에 기술되어 있어야 한다.

      ADVANCING phrase가 WRITE statement에 기술되거나, 파일에 LINAGE clause가 있으면, carriage control character가 생성되어 레코드에 첨가된다. ADVANCING phrase가 생략되면 AFTER ADVANCING 1 LINE이 기술된 것처럼 동작한다.

    • LINAGE-COUNTER rules

      파일에 LINAGE clause가 기술되어 있으면, LINAGE-COUNTER special register는 WRITE statement가 실행될 때마다 다음의 규칙에 따라 수정된다.

      • ADVANCING PAGE가 기술되어 있으면 LINAGE-COUNTER는 1이 된다.

      • ADVANCING identifier-2 또는 integer-1이 기술되어 있으면, LINAGE-COUNTER는 identifier-2 또는 integer-1의 값만큼 증가한다.

      • ADVANCING phrase가 생략되어 있으면, LINAGE-COUNTER는 1만큼 증가한다.

      • 새 페이지가 된다면 LINAGE-COUNTER는 1이 된다.

  • END-OF-PAGE phrases

    • END-OF-PAGE phrases가 기술되어 있고, WRITE statement에 의해 논리적 페이지의 마지막에 이르면, END-OF-PAGE phrase의 imperative-statement-3에 기술된 statement를 실행한다. END-OF-PAGE phrase가 기술되어 있으면, FD entry는 반드시 LINAGE clause를 포함하고 있어야 한다.

    • END-OF-PAGE condition은 page body 내의 footing area에 레코드 라인이 찍히거나 ADVANCING phrase에 의해 공백이 생기면 발생한다.

      다시 말하면, END-OF-PAGE condition은 LINAGE-COUNTER special register 의 값이 LINAGE clause의 WITH FOOTING phrase에 기술된 값과 같거나 크면 발생한다.

    • Automatic page overflow condition은 WRITE statement가 실행되면서 현재 page body에서 완전히 처리되지 못하고 다음 페이지로 넘어가야 할 때 발생한다.

    • END-OF-PAGE condition이나 Automatic page overflow condition이 발생되고 END-OF-PAGE phrases가 기술되어 있으면 imperative-statement-3에 기술된 statement를 실행한다.

  • INVALID KEY phrases

    • 다음은 invalid key 조건이 발생하는 경우이다.

      • Indexed file에 대하여 sequential access이고 OUTPUT으로 open되었을 때 prime record key 값이 이전 레코드보다 크지 않은 경우

      • Indexed file에 대하여 I-O 또는 OUTPUT으로 open되었을 때 prime record key 값이 이미 존재하는 레코드의 prime record key 값과 같은 경우

      • Relative file에 대하여 random 또는 dynamic access일 때 RELATIVE KEY가 이미 존재하는 레코드의 RELATIVE KEY와 같은 경우

  • END-WRITE phrases

    • 명시적으로 WRITE statement의 끝을 나타낸다.

다음은 각 I-O mode별 WRITE statement 사용에 대한 설명이다.

  • sequential files

    • Sequential file의 최대 레코드 길이는 파일이 생성될때 결정되고 이후로는 바뀌지 않는다.

    • File position indicator는 WRITE statement 실행에 영향을 미치지 않는다.

    • File control entry에 FILE STATUS clause가 기술되어 있으, WRITE statement 실행후에 결과 값으로 file status key를 갱신한다.

  • indexed files

    • Indexed files에 대하여 WRITE statement를 실행하기 전에 prime record key( file control entry에 RECORD KEY로 정의된 데이터 항목)를 원하는 값으로 설정해야 한다. 이 값은 파일에서 유일해야 한다.

    • File control entry에 ACCESS IS SEQUENTIAL이 기술되어 있다면 RECORD KEY 값의 순서에 따라 레코드들이 파일에 쓰여져야 한다.

  • relative files

    • File control entry에 ACCESS IS SEQUENTIAL이 기술되어 있다면 첫 번째 레코드는 relative record number 1, 두 번째 레코드는 relative record number 2, 세 번째 레코드는 relative record number 3, ...과 같이 파일에 쓰여진다. 이때, File control entry에 RELATIVE KEY가 기술되어 있다면 쓰여진 레코드의 relative number가 RELATIVE KEY에 저장된다.

    • File control entry에 ACCESS IS RANDOM 또는 ACCESS IS DYNAMIC이 기술되어 있다면 WRITE statement가 실행되기 전에 RELATIVE KEY가 반드시 지정된 값을 가지고 있어야 한다. WRITE statement가 실행되고 레코드는 이 값의 relative number로 파일에 저장된다.