Command Procedure

본 장에서는 Command Procedure의 구성 요소에 대해서 설명한다.

1. 제어 변수

다음은 Command Procedure에서 사용되는 제어 변수 목록이다.

제어 변수 설명

&LASTCC

최근의 반환 코드이다. Command Procedure 고유의 반환 코드들과 그 의미는 다음과 같다.

  • 300 : 변경할 수 없는 제어 변수를 변경하려고 했다.

  • 312 : GLOBAL 문이 잘못되었다.

  • 332 : 데이터셋 이름이 유효하지 않다.

  • 340 : OPENFILE 문의 오퍼랜드가 잘못되었다.

  • 348 : OPENFILE 문에 지정된 데이터셋을 열 수 없다.

  • 352 : GETFILE 문에 지정된 데이터셋이 열려 있지 않다.

  • 360 : PUTFILE 문에 지정된 데이터셋이 열려 있지 않다.

  • 368 : CLOSFILE 문에 지정된 데이터셋이 열려 있지 않다.

  • 372 : 갱신 모드로 열려 있는 데이터셋에 대해 GETFILE 문을 수행하기 전에 PUTFILE 문을 수행했다.

  • 400 : GETFILE 문 수행 중 파일의 끝에 다다랐다.

  • 848 : 산술식에 정수 이외의 변수가 기술되어 있다.

  • 900 : ampersand(&) 뒤에 키워드가 정의되어 있지 않다.

  • 912 : &SUBSTR 함수의 from의 값이 to의 값보다 크다.

  • 916 : &SUBSTR 함수의 from이나 to의 값이 정수가 아니거나 EXIT 문의 CODE 오퍼랜드의 값이 정수가 아니다.

  • 920 : &SUBSTR 함수의 from이나 to의 값이 음수이거나 EXIT 문의 CODE 오퍼랜드의 값이 음수이다.

  • 932 : &SUBSTR 함수의 from이나 to의 값이 문자열의 범위를 넘어섰다.

  • 936 : 내장 함수의 형식이 잘못되었다.

  • 952 : GOTO 문에 지정된 분기처를 찾을 수 없다.

  • 956 : GOTO 문에 분기처가 기술되어 있지 않다.

  • 972 : TERMIN 문을 일괄 작업에 사용했다.

  • 999 : Command Procedure 호출에 실패했다.

&MAXCC

반환 코드의 최댓값이다.

&SYS#CC

ENDJOBNAME 이벤트가 발생한 경우에 설정되며, 완료된 작업의 완료 코드이다.

&SYS#EVENT

발생한 사건의 이름이다. 본 제어변수는 다음 값들 중 하나를 갖는다.

  • TIME

  • DATE

  • WEEK

  • INTERVAL

  • READYJOBNAME

  • ENDJOBNAME

  • MESSAGE

  • MSGID

  • SYSTEM

  • USEREVENT

  • DATASET

  • MOUNT

  • SYSOUT

  • ONDEVICE

&SYS#EVTNO

WAIT 문에서 하나의 오퍼랜드에 복수의 값을 지정한 경우, 사건이 발생했을 때 지정된 값 중 몇 번째 값에 대응하는 사건이 발생했는지가 저장된다.

&SYS#FMSG

MESSAGE 이벤트나 MSGID 이벤트가 발생한 경우에 설정되며, 출력된 메시지 전체가 저장된다.

&SYS#JN

ENDJOBNAME 이벤트가 발생한 경우에 설정되며, 완료된 작업의 작업명이다.

&SYS#MSG

MESSAGE 이벤트나 MSGID 이벤트가 발생한 경우에 설정되며, 출력된 메시지의 본문 부분이 저장된다.

&SYS#PFX

MESSAGE 이벤트나 MSGID 이벤트가 발생한 경우에 설정되며, 출력된 메시지의 식별자가 저장된다.

&SYSASIS

  • ON : 명령 수행 전에 소문자를 대문자로 변환하지 않는다.

  • OFF : 명령 수행 전에 소문자를 대문자로 변환한다.

&SYSCONLIST

  • ON : 기호 파라미터 치환 후 명령을 터미널에 표시한다.

  • OFF : 기호 파라미터 치환 후 명령을 터미널에 표시하지 않는다.

&SYSDATE

mm/dd/yy 형식의 현재 날짜이다.

&SYSDVAL

사용자가 최근에 터미널에 입력한 문자열이다.

&SYSENV

  • BACK : Command Procedure가 배치 작업의 일부로서 실행 중인 경우이다.

  • FORE : Command Procedure가 배치 작업의 일부로서 실행 중이지 않은 경우이다.

&SYSFLUSH

  • ON : Command Procedure 실행 중 오류가 발생하면 이후의 Command Procedure는 실행하지 않는다.

  • OFF : Command Procedure 실행 중 오류가 발생해도 이후의 Command Procedure를 실행한다.

&SYSICMD

Command Procedure의 이름이다.

암묵적 실행인 경우 즉 사용자가 EXEC 문을 이용해 명시적으로 Command Procedure를 실행하지 않은 경우에만 사용된다.

&SYSNEST

  • YES : Command Procedure가 다른 Command Procedure에 의해 호출된 상태이다.

  • NO : Command Procedure가 다른 Command Procedure에 의해 호출된 상태가 아니다.

&SYSPCMD

최근 실행한 TSO 명령문(파라미터 제외)이다. (기본값: EXEC)

&SYSPREF

데이터셋 이름 접두어이다.

&SYSSCAN

각 Command Procedure 문을 실행하기 전 스캔(기호 파라미터를 값으로 치환하는 과정)을 최대 몇 회 수행할지 지정한다.

&SYSSDATE

yy-mm-dd 형식의 현재 날짜이다.

&SYSSTIME

hh:mm 형식의 현재 시각이다.

&SYSSTOP

Command Procedure 내에서 실행 가능한 최대 명령 개수이다.

&SYSSYMLIST

  • ON : 기호 파라미터 치환 전 명령을 터미널에 표시한다.

  • OFF : 기호 파라미터 치환 전 명령을 터미널에 표시하지 않는다.

&SYSTIME

hh:mm:ss 형식의 현재 시각이다.

&SYSTMID

현재 연결된 단말기의 이름이다.

&SYSUID

TSO 세션의 사용자 ID이다.

2. 내장 함수

다음은 Command Procedure에서 사용되는 내장 함수 목록이다.

내장 함수 설명

&DATATYPE(expr)

표현식 expr의 결과가 숫자이면 NUM을 반환하고, 문자열이면 CHAR를 반환한다.

&EVAL(expr)

수식 expr의 연산 결과를 반환한다.

&LENGTH(expr)

표현식 expr의 연산 결과의 문자 길이를 반환한다.

&NRSTR(expr)

표현식 expr의 기호 파라미터는 치환하되, 중첩 치환은 하지 않은 결과를 반환한다. 수식 연산은 수행하지 않는다.

&STR(expr)

표현식 expr의 기호 파라미터를 치환하고 내장 함수를 처리한 결과를 반환한다. 수식 연산은 수행하지 않는다.

&SUBSTR(from:to,str)

문자열 str의 from 위치에서 to 위치까지 추출한 부분문자열을 반환한다. to를 생략하면 from 위치의 한 글자만 추출한다.

&SYS#EPRM(eprm)

가상 파라미터 eprm의 값을 반환한다. 가상 파라미터의 설정은 제1장을 참고한다.

&SYSDSN(d)

데이터셋 d의 상태를 체크하여, 사용 가능 상태이면 OK를 반환하고, 아니면 에러 메시지를 반환한다.

&SYSINDEX(needle,haystack,start)

문자열 haystack 내에서 문자열 needle의 위치를 반환한다.

start가 0이거나 생략되면 haystack 전체에서 needle을 찾는다. start가 양수이면 haystack의 start번째 문자부터 needle을 찾는다. needle을 찾지 못한 경우엔 0을 반환한다.

&SYSNSUB(level,expr)

표현식 expr의 기호 파라미터를 치환하되, 최대 level 회 치환한다.

3. 연산자

IF 문과 같은 몇몇 Command Procedure 문에서는 표현식이 사용될 수 있다. 표현식은 정수, 문자열, 기호 파라미터, 제어 변수나 내장 함수 같은 피연산자를 연산자를 이용해 연결한 형태를 의미한다.

연산자는 산술 연산자, 비교 연산자, 논리 연산자로 분류되며, 각 연산자의 의미는 다음과 같다.

  • 산술 연산자

    산술 연산자 설명

    +

    더하기

    -

    빼기

    *

    곱하기

    /

    나누기

    **

    지수 (우변이 음수이면 연산 결과는 0이다.)

    //

    나머지

  • 비교 연산자

    비교 연산자 설명

    EQ 또는 =

    좌변과 우변이 같다.

    NE 또는 ^=

    좌변과 우변이 같지 않다.

    LT 또는 <

    좌변이 우변보다 작다.

    GT 또는 >

    좌변이 우변보다 크다.

    LE 또는 <=

    좌변이 우변보다 작거나 같다.

    GE 또는 >=

    좌변이 우변보다 크거나 같다.

    NG 또는 ^>

    좌변이 우변보다 크지 않다.

    NL 또는 ^<

    좌변이 우변보다 작지 않다.

  • 논리 연산자

    논리 연산자 설명

    AND 또는 &&

    논리곱

    OR 또는 |

    논리합

4. Command Procedure 문

Command Procedure 문의 종류와 기능은 다음과 같다.

Command Procedure 문 설명

ATTN 문

인터럽트 핸들러를 설정한다. OpenFrame에서는 문법 오류만 검사한다.

CLOSFILE 문

데이터셋을 닫는다.

CONTROL 문

Command Procedure 실행 관련 옵션을 지정한다.

DATA-ENDDATA 문

TSO 명령과 화면 출력 데이터 영역을 구분한다.

DO-END 문

한 개 이상의 Command Procedure 문을 반복 수행한다.

ERROR 문

에러 핸들러를 설정한다.

EXIT 문

Command Procedure 실행을 중지하고 상위 Command Procedure에게 제어를 반환한다.

GETFILE 문

데이터셋으로부터 레코드를 읽는다.

GLOBAL 문

중첩된 Command Procedure 사이에서 공유되는 기호 파라미터를 선언한다.

GOTO 문

지정된 위치로 분기한다.

IF-THEN-ELSE 문

지정된 조건에 따라 서로 다른 동작을 수행한다.

INDATA 문

화면 출력 데이터가 저장될 데이터셋을 지정한다. OpenFrame에서는 문법 오류만 검사한다.

OPENFILE 문

데이터셋을 연다.

PROC 문

상위 Command Procedure로부터 전달 받는 기호 파라미터를 정의한다.

PUTFILE 문

데이터셋에 레코드를 기록한다.

READ 문

사용자로부터 터미널을 통해 입력 받은 데이터를 기호 파라미터에 저장한다.

READDVAL 문

제어 변수 &SYSDVAL의 내용을 지정된 기호 파라미터에 저장한다.

RETURN 문

오류가 발생한 Command Procedure 문 다음의 Command Procedure 문으로 제어를 반환한다.

SET 문

기호 파라미터나 제어 변수에 값을 저장한다.

TERMIN 문

사용자 입력을 받을 수 있도록 터미널에 제어를 넘긴다. OpenFrame에서는 문법 오류만 검사한다.

WRITE/WRITENR 문

터미널에 문자열을 출력한다.

4.1. ATTN 문

인터럽트 핸들러를 설정한다. OpenFrame에서는 문법 오류만 검사한다.

사용법

figure attn stmt

4.2. CLOSFILE 문

OPENFILE 문에서 연 데이터셋을 닫는다.

사용법

figure closfile stmt
항목 설명

ddname

OPENFILE 문에서 연 데이터셋의 DD 이름이다.

예제

다음은 CLOSFILE 문 사용 예제이다.

CLOSFILE SYSUT1

4.3. CONTROL 문

Command Procedure 실행 관련 옵션을 지정한다.

사용법

figure control stmt

image

image

image

image

image

image

image

image

항목 설명

end

DO 그룹의 끝맺음 문자열을 지정한다.

오퍼랜드

다음은 앞에서 언급한 오퍼랜드에 대한 설명이다.

오퍼랜드 설명

PROMPT

터미널 프롬프팅을 사용한다. OpenFrame에서는 문법 오류만 검사한다. (약어: P)

NOPROMPT

터미널 프롬프팅을 사용하지 않는다. OpenFrame에서는 문법 오류만 검사한다. (약어: NOP)

SYMLIST

기호 파라미터 치환 전 명령을 터미널에 표시한다. (약어: S)

NOSYMLIST

기호 파라미터 치환 전 명령을 터미널에 표시하지 않는다. (약어: NOS)

LIST

명령을 표시한다. OpenFrame에서는 문법 오류만 검사한다. (약어: L)

NOLIST

명령을 표시하지 않는다. OpenFrame에서는 문법 오류만 검사한다. (약어: NOL)

CONLIST

기호 파라미터 치환 후 명령을 터미널에 표시한다. (약어: C)

NOCONLIST

기호 파라미터 치환 후 명령을 터미널에 표시하지 않는다. (약어: NOC)

CAPS

명령 수행 전에 소문자를 대문자로 변환한다. (약어: CA)

NOCAPS

명령 수행 전에 소문자를 대문자로 변환하지 않는다.

ASIS

명령 수행 전에 소문자를 대문자로 변환하지 않는다. (약어: A)

MSG

정보 메시지를 표시한다. OpenFrame에서는 문법 오류만 검사한다. (약어: MS)

NOMSG

정보 메시지를 표시하지 않는다. OpenFrame에서는 문법 오류만 검사한다. (약어: NOM)

FLUSH

Command Procedure 실행 중 오류가 발생하면 이후의 Command Procedure는 실행하지 않는다. (약어: F)

NOFLUSH

Command Procedure 실행 중 오류가 발생해도 이후의 Command Procedure를 실행한다. (약어: NOF)

MAIN

Command Procedure가 다른 Command Procedure에 의해 호출되지 않았음을 의미한다.

END

DO 그룹의 끝맺음 문자열을 지정한다.

예제

다음은 CONTROL 문 사용 예제이다.

CONTROL END(FIN)

4.4. DATA-ENDDATA 문

DATA 문과 ENDDATA 문 사이에 나오는 데이터를 별도로 처리한다. 오퍼랜드 미지정 시 DATA 문과 ENDDATA 문 사이에 나오는 데이터를 TSO 명령으로 간주한다. 오퍼랜드 지정 시의 처리 방식에 대해서는 오퍼랜드 설명을 참고한다.

사용법

figure data stmt

image

오퍼랜드

다음은 앞에서 언급한 오퍼랜드에 대한 설명이다.

오퍼랜드 설명

PROMPT

DATA 문과 ENDDATA 문 사이에 나오는 데이터를 프롬프팅 데이터로 간주한다. 기호 파라미터가 있으면 치환한다.

TEXT

DATA 문과 ENDDATA 문 사이에 나오는 데이터를 텍스트로 간주한다. 기호 파라미터가 있어도 치환하지 않는다.

예제

다음은 DATA-ENDDATA 문 사용 예제이다.

DO
  DATA
    PROFILE NOPREFIX
  ENDDATA
END

4.5. DO-END 문

DO 문과 END 또는 DOEND 문 사이의 TSO 명령과 Command Procedure 문(이하 DO 그룹)을 실행한다.

사용법

figure do stmt

image

항목 설명

expression

DO 그룹 반복 여부 판단 조건을 표현식의 형태로 지정한다.

오퍼랜드

다음은 앞에서 언급한 오퍼랜드에 대한 설명이다.

오퍼랜드 설명

UNTIL

UNTIL 다음에 지정된 표현식의 값이 거짓인 동안 DO 그룹을 반복 실행한다.

WHILE

WHILE 다음에 지정된 표현식의 값이 참인 동안 DO 그룹을 반복 실행한다.

예제

다음은 DO-END 문 사용 예제이다.

DO WHILE &LASTCC LE 4
 SET A=&A+1
 CALL TESTPGM '&A'
END

4.6. ERROR 문

Command Procedure 실행 중 하위 TSO 명령이나 Command Procedure 문의 반환 코드가 0이 아닌 경우 수행할 작업(이하 에러 핸들러)을 지정한다. ERROR DO와 END 사이에서 EXIT 문, RETURN 문 또는 GOTO 문을 맞닥뜨리면 해당 위치에서 에러 핸들러를 종료한다. 에러 핸들러 수행 후 &LASTCC는 0으로 리셋된다.

사용법

figure error stmt
항목 설명

action

에러 핸들러를 지정한다. 여러 작업을 기술하려면 DO 문과 END 문 사이에 기술한다.

오퍼랜드

다음은 앞에서 언급한 오퍼랜드에 대한 설명이다.

오퍼랜드 설명

OFF

이미 지정되어 있는 에러 핸들러를 지정 취소한다.

예제

다음은 ERROR 문 사용 예제이다.

ERROR DO
         WRITE &LASTCC
         RETURN
      END

4.7. EXIT 문

Command Procedure 실행을 중지하고 상위 Command Procedure에게 제어를 반환한다.

사용법

figure exit stmt

image

항목 설명

code

반환 코드를 지정한다.

오퍼랜드

다음은 앞에서 언급한 오퍼랜드에 대한 설명이다.

오퍼랜드 설명

CODE

반환 코드를 지정한다. CODE 오퍼랜드가 생략된 경우에는 &LASTCC 값이 반환 코드가 된다.

QUIT

CONTROL NOFLUSH나 MAIN이 지정된 상위 Command Procedure로 제어를 반환한다.

예제

다음은 EXIT 문 사용 예제이다.

ERROR DO
         EXIT CODE(&MAXCC)
      END

4.8. GETFILE 문

데이터셋으로부터 레코드를 읽는다. 레코드는 지정된 DD 이름과 동일한 이름의 기호 파라미터에 저장된다.

사용법

figure getfile stmt
항목 설명

ddname

OPENFILE 문에서 연 데이터셋의 DD 이름을 지정한다.

예제

다음은 GETFILE 문 사용 예제이다.

OPENFILE FILE1 UPDATE
GETFILE FILE1
SET FILE1=UPDATED
PUTFILE FILE1
CLOSFILE FILE1

4.9. GLOBAL 문

중첩된 Command Procedure 사이에서 공유되는 기호 파라미터를 선언한다.

최상위 Command Procedure에는 하위 Command Procedure들과 공유할 기호 파라미터가 전부 선언되어 있어야 한다. 하위 Command Procedure에서는 최상위 Command Procedure의 GLOBAL 문에 선언된 기호 파라미터들 전체 또는 일부를 GLOBAL 문에 별도의 이름으로 선언한 후 사용할 수 있다.

상위 Command Procedure의 GLOBAL 문의 n번째 기호 파라미터는 하위 Command Procedure의 GLOBAL 문의 n번째 기호 파라미터와 동일한 값을 참조하게 된다.

사용법

figure global stmt
항목 설명

variable

기호 파라미터명을 지정한다.

예제

다음은 GLOBAL 문 사용 예제이다. COMP1에서 COMP2를 호출하고 COMP2에서 COMP3를 호출한다. GA1과 GB1과 GC1은 같은 값을 참조한다. GA2와 GB2와 GC2는 같은 값을 참조한다. GA3와 GC3는 같은 값을 참조한다. GA4와 GC4는 같은 값을 참조한다.

  • COMP1

    PROC 0 AP1,AP2
    GLOBAL GA1,GA2,GA3,GA4
    SET &GA1=&AP1
    SET &GA2=&AP2
    SET &GA3=0
    SET &GA4=&AP1+2
    EXEC COMP2
  • COMP2

    GLOBAL GB1,GB2
    EXEC COMP3
  • COMP3

    GLOBAL GC1,GC2,GC3,GC4

4.10. GOTO 문

지정된 위치로 분기한다.

사용법

figure goto stmt
항목 설명

dest

분기할 위치의 레이블이다.

예제

다음은 GOTO 문 사용 예제이다.

      SET &CNT=2
      GOTO TAG&CNT
TAG1: WRITE CNT IS NOT TWO
TAG2: WRITE CNT IS TWO

4.11. IF-THEN-ELSE 문

표현식의 값에 따라 서로 다른 동작을 수행한다.

사용법

figure if stmt

image

항목 설명

expression

판단의 기준이 되는 표현식이다. 표현식의 값이 참이면 then_action을 수행하고 거짓이면 else_action을 수행한다.

then_action

expression의 값이 참인 경우 수행할 TSO 명령이나 Command Procedure 문이다. DO 그룹일 수도 있다.

else_action

expression의 값이 거짓인 경우 수행할 TSO 명령이나 Command Procedure 문이다. DO 그룹일 수도 있다.

예제

다음은 IF-THEN-ELSE 문 사용 예제이다.

IF &LASTCC EQ 0 THEN-
    WRITE ZERO
  ELSE-
    WRITE NONZERO

4.12. INDATA 문

프롬프팅 데이터가 저장될 데이터셋을 지정한다. OpenFrame에서는 문법 오류만 검사한다.

사용법

figure indata stmt

4.13. OPENFILE 문

데이터셋을 연다.

사용법

figure openfile stmt
항목 설명

ddname

데이터셋의 DD 이름을 지정한다.

오퍼랜드

다음은 앞에서 언급한 오퍼랜드에 대한 설명이다.

오퍼랜드 설명

INPUT

데이터셋을 입력 모드로 연다. 생략 시 입력 모드로 연다.

OUTPUT

데이터셋을 출력 모드로 연다.

UPDATE

데이터셋을 갱신 모드로 연다.

예제

다음은 OPENFILE 문 사용 예제이다.

ALLOC DD(INP) DS(MY.DATA)
OPENFILE INP

4.14. PROC 문

상위 Command Procedure로부터 전달 받는 기호 파라미터를 정의한다. 키워드 지정 기호 파라미터는 위치 지정 기호 파라미터 뒤에 기술되어야 한다.

사용법

figure proc stmt

image

항목 설명

n

위치 지정 기호 파라미터의 개수를 지정한다.

name

파라미터의 이름을 지정한다.

default_value

파라미터의 기본값을 지정한다. 값이 지정되지 않은 경우 해당 파라미터 값은 null로 초기화된다.

예제

다음은 PROC 문 사용 예제이다.

PROC 3 PP1 PP2 PP3 KP1(DEFVAL1) KP2

4.15. PUTFILE 문

지정된 DD 이름과 동일한 이름의 기호 파라미터에 담긴 데이터를 데이터셋에 기록한다.

사용법

figure putfile stmt
항목 설명

ddname

OPENFILE 문에서 연 데이터셋의 DD 이름을 지정한다.

예제

다음은 PUTFILE 문 사용 예제이다.

OPENFILE FILE1 UPDATE
GETFILE FILE1
SET FILE1=UPDATED
PUTFILE FILE1
CLOSFILE FILE1

4.16. READ 문

사용자로부터 터미널을 통해 입력 받은 데이터를 기호 파라미터에 저장한다. 오퍼랜드를 생략하는 경우에는 &SYSDVAL에 저장한다.

사용법

figure read stmt
항목 설명

param

사용자로부터 터미널을 통해 입력 받은 데이터가 저장되는 변수명을 지정한다.

예제

다음은 READ 문 사용 예제이다.

READ ANS1

4.17. READDVAL 문

&SYSDVAL의 내용을 기호 파라미터에 저장한다. 오퍼랜드를 생략하는 경우에는 아무 일도 하지 않는다.

사용법

figure readdval stmt
항목 설명

param

&SYSDVAL의 내용이 저장되는 변수명을 지정한다.

예제

다음은 READDVAL 문 사용 예제이다.

SET SYSDVAL=&STR(SMITH JONES KELLY)
READDVAL NAME1,NAME2,NAME3

4.18. RETURN 문

오류가 발생한 Command Procedure 문 다음의 Command Procedure 문으로 제어를 반환한다.

사용법

figure return stmt

예제

다음은 RETURN 문 사용 예제이다.

ERROR DO
         WRITE &LASTCC
         RETURN
      END

4.19. SET 문

기호 파라미터나 제어 변수에 표현식의 값을 저장한다.

사용법

figure set stmt
항목 설명

param

기호 파라미터나 제어 변수의 이름을 지정한다.

expression

표현식을 지정한다.

예제

다음은 SET 문 사용 예제이다.

SET A=2*3+1

4.20. TERMIN 문

사용자 입력을 받을 수 있도록 터미널에 제어를 넘긴다. OpenFrame에서는 문법 오류만 검사한다.

사용법

figure termin stmt

4.21. WRITE/WRITENR 문

터미널에 문자열을 출력한다. WRITE 문의 경우에는 문자열 출력 후 커서를 다음 줄로 옮기고, WRITENR 문의 경우엔 문자열 출력 후 커서를 다음 줄로 옮기지 않는다.

사용법

figure write stmt
항목 설명

text

터미널에 출력할 문자열을 지정한다.

예제

다음은 WRITE 문 사용 예제이다.

WRITE HELLO WORLD