동적 변수 제어문

본 장에서는 동적 변수 제어문과 각 오퍼랜드에 대해 설명한다.

1. 개요

OpenFrame에서는 두 가지 형태의 동적 변수 제어문을 지원한다. 두 형태의 문법을 함께 사용할 수 없다.

다음은 동적 변수 제어문의 목록이다.

동적 변수 제어문 설명

%% 제어문

JCL에 '%%'로 시작하는 문법을 기술하면 %% 동적 변수 제어문임을 나타낸다.

OPC 제어문

JCL의 주석문 뒤에 '%OPC’로 시작하는 문법을 기술하면 OPC 동적 변수 제어문임을 나타낸다.

2. %% 제어문

%% 제어문은 JCL에서 '%%'구문으로 시작하는 모든 변수를 의미하며 JCL 문법과 관계없이 instream 데이터를 포함한 어느 위치에서도 기술이 가능하다. 명령어 또는 변수의 앞에 '%%' 라고 기술되어 있으면 OpenFrame에서는 해당 구문을 %% 제어문으로 인식한다.

%% 제어문이 포함된 JCL을 실행하기 위해서는 textrun 툴을 사용하여 JOB을 submit해야 하며 textrun을 실행하는 경우 textrun 서브젝트의 AUTOEDIT 섹션의 USE 키의 Value를 YES로 설정한 후 실행해야 한다.

  1. textrun 툴에 대한 자세한 내용은 OpenFrame Batch "툴 참조 안내서"를 참고한다.

  2. textrun 서브젝트 설정에 대한 자세한 내용은 OpenFrame Batch "환경설정 안내서"를 참고한다.

다음은 %% 제어문에 대한 설명이다.

  • 사용법

    %%변수명
    항목 설명

    변수명

    특정 문자열 앞에 '%%'가 있으면 해당 구문은 %% 제어문으로 취급된다.

    변수명은 단순한 변수가 될 수도 있고 OpenFrame에서 지원하는 오퍼레이션이 될 수도 있다. 오퍼레이션 및 시스템 변수의 종류는 아래에서 설명한다.

오퍼레이션

다음은 앞에서 언급한 오퍼레이션 항목에 대한 설명으로 OpenFrame에서 지원하는 오퍼레이션은 다음과 같다.

오퍼레이션 설명

SET

변수에 값을 지정한다.

GLOBAL

특정 경로의 파일에 기술된 변수 리스트를 불러온다.

IF/ELSE/ENDIF

분기해서 문장을 실행할수 있도록 조건을 지정하고 조건의 결과에 따라서 실행할 문장을 기술한다.

위에 설명되지 않은 오퍼레이션은 지원하지 않는다.

시스템 변수

다음은 %% 제어문에서 정의하고 있는 시스템 변수에 대한 설명으로, OpenFrame에서 지원하는 %% 제어문 시스템 변수는 다음과 같다.

시스템 변수 설명

TIME

시스템의 현재 시간을 hhmmss 형식으로 출력한다.

DAY

시스템의 현재 날짜의 일(day)을 dd 형식으로 출력한다.

ODAY

입력받은 날짜의 일(day)을 dd 형식으로 출력한다.

RDAY

시스템의 현재 날짜의 일(day)을 dd 형식으로 출력한다.

RWDAY

시스템의 현재 요일을 한자리 숫자로 출력한다.

  • 1 : 일요일

  • 2 : 월요일

  • 3 : 화요일

  • 4 : 수요일

  • 5 : 목요일

  • 6 : 금요일

  • 0 : 토요일

OJULDAY

입력받은 날짜를 줄리안 날짜 형태(nnn)로 출력한다.

DATE

시스템의 현재 날짜를 yymmdd 형식으로 출력한다.

$DATE

시스템의 현재 날짜를 yyyymmdd 형식으로 출력한다.

ODATE

입력받은 날짜를 yymmdd 형식으로 출력한다.

$ODATE

입력받은 날짜를 yyyymmdd 형식으로 출력한다.

$RDATE

입력받은 날짜를 yyyymmdd 형식으로 출력한다.

RDATE

입력받은 날짜를 yymmdd 형식으로 출력한다.

OMONTH

입력받은 날짜의 월(month)을 mm 형식으로 출력한다.

RMONTH

입력받은 날짜의 월(month)을 mm 형식으로 출력한다.

OYEAR

입력받은 날짜의 연도(year)를 yy 형식으로 출력한다.

$OYEAR

입력받은 날짜의 연도(year)를 yyyy 형식으로 출력한다.

RYEAR

입력받은 날짜의 연도(year)를 yy 형식으로 출력한다.

$RYEAR

입력받은 날짜의 연도(year)를 yyyy 형식으로 출력한다.

OCENT

입력받은 날짜의 연도(year) 첫 두 자리를 yy 형식으로 출력한다.

BLANKn

n개의 공백을 출력한다.

RN

OpenFrame에서는 에러가 나지 않도록 문법만 지원한다.

2.1. SET

SET 문 뒤에 지정된 %% 변수에 값을 지정한다.

  • 사용법

    %%SET %%변수명 = 연산식
    항목 설명

    변수명

    SET문 뒤에 '%%변수명' 형식으로 지정하며 값을 대입할 변수명을 기술한다.

    연산식

    변수명에 대입할 연산식을 지정한다.

    정수 형태의 변수 또는 연산식을 기술할 수 있으며 변수에 '%%'의 접두사가 붙어 있지 않으면 숫자나 문자열로 인식한다.

    연산식에서만 사용할 수 있는 시스템 변수들이 존재하는데 그 내용은 다음과 같다.

    • CALCDATE : 날짜를 계산하여 6자리(yymmdd)로 출력한다.

    • $CALCDTE : 날짜를 계산하여 8자리(yyyymmdd)로 출력한다.

    • $WCALC : 날짜를 계산하여 8자리(yyyymmdd)로 출력한다.

    • $JULIAN : 그레고리안 날짜(yyyymmdd)를 줄리안 날짜(yyyyddd)로 변경한다.

    • SUBSTR : 지정한 문자열에서 부분 문자열을 추출한다.

    • PLUS : 앞의 값과 뒤의 값을 더한다.

    • MINUS : 앞의 값에서 뒤의 값을 뺀다.

    연산식에는 숫자, 문자 형태의 변수 및 시스템 지정 변수 등을 기술할 수 있다.

  • 사용예제

    • 다음은 SET 문으로 A, B라는 변수에 값을 지정하는 예이다. 이 예제에서 A, B에 대입되는 값은 각각 '100', '300’이 된다.

      %%SET %%A = 100
      %%SET %%B = %%A + 200
    • 다음은 SET문으로 C, D, E라는 변수에 값을 지정하는 예이다. 이 예제에서 입력된 날짜가 '20191231’일 때 C, D, E에 대입되는 값은 각각 '20191226', '191226', '191229’가 된다.

      %%SET %%C = %%CALCDATE %%$ODATE - 5
      %%SET %%D = %%$CALCDTE %%$ODATE - 5
      %%SET %%E = %%D %%PLUS 3
    • 다음은 SET 문으로 F, G라는 변수에 값을 지정하는 예이다. 이 예제에서 변수 F에는 'OPENFRAME’이라는 문자열이 저장된다. 변수 G에는 F에 저장된 문자열의 첫 번째 바이트부터 4자리 값인 'OPEN’이 저장된다.

      %%SET %%F = OPENFRAME
      %%SET %%G = %%SUBSTR %%E 1 4

2.2. GLOBAL

특정 파일에 변수 리스트를 저장해 두고 GLOBAL 문을 통해 불러와서 사용할 수 있다. 이렇게 하면 JCL에 동일한 SET 문을 일일이 기술하지 않아도 된다는 장점이 있다.

  • 사용법

    %%GLOBAL 파일명
    항목 설명

    파일명

    GLOBAL 문 뒤에 지정하며 변수 리스트가 정의된 파일명을 기술한다.

2.3. IF/ELSE/ENDIF

분기해서 문장을 실행할수 있도록 조건을 지정하고 조건의 결과에 따라서 실행할 문장을 기술한다. ELSE 문은 IF 문이 앞에 기술되어 있어야만 사용할 수 있으며 IF 문은 ENDIF 문으로 종료되어야 한다. IF 문을 중첩하여 사용하는 것도 가능하다.

  • 사용법

    %%IF %%변수명 조건문
      AAA
    %%ELSE
      BBB
    %%ENDIF
    항목 설명

    조건문

    IF 문에서 지정할 수 있는 조건은 다음과 같다.

    • EQ : 앞의 값과 뒤의 값이 같다.

    • NE : 의 값과 뒤의 값이 같지 않다.

    • GT : 앞의 값이 뒤의 값보다 크다.

    • GE : 앞의 값이 뒤의 값보다 크거나 같다.

    • LT : 앞의 값이 뒤변의 값보다 작다.

    • LE : 앞의 값이 뒤의 값보다 작거나 같다.

  • 사용예제

    다음은 IF/ELSE/ENDIF 문의 사용예이다. 이 예제에서 입력 날짜가 yyyymmdd일 때 변수 S에는 첫 두 문자인 yy가 저장되고, yy의 값이 20보다 큰 경우에는 변수 X의 값이 1이 되고 그렇지 않은 경우에는 0이 된다.

    %%SET %%T = %%$ODATE
    %%SET %%S = %%SUBSTR 1 2
    %%IF %%S GT 20
      %%SET %%X = 1
    %%ELSE
      %%SET %%X = 0
    %%ENDIF

3. OPC 제어문

OPC 제어문은 JCL에 '//*%OPC’구문으로 시작하며 JCL 문법과 관계없이 어느 위치에서도 기술이 가능하다.

OPC 제어문이 포함된 JCL을 SUBMIT 하기 위해서는 textrun 툴을 사용하여 JOB을 submit해야 하며 textrun을 실행하는 경우 OpenFrame 환경설정 textrun 서브젝트에 TWS 섹션의 USE 항목 설정을 YES로 한 후 실행해야 한다.

  1. textrun 툴에 대한 자세한 내용은 OpenFrame Batch "툴 참조 안내서"를 참고한다.

  2. textrun 서브젝트 설정방법에 대한 자세한 내용은 OpenFrame Batch "환경설정 안내서"를 참고한다.

다음은 OPC 제어문에 대한 설명이다.

  • 사용법

    //*%OPC △¹오퍼레이션 △¹오퍼랜드
    항목 설명

    오퍼레이션

    "//*%OPC"에 이어서 오퍼레이션을 기술한다. 지원되는 오퍼레이션에 대한 설명은 오퍼레이션을 참고한다.

    오퍼랜드

    오퍼레이션 이후로 1개 이상의 공백을 두고 오퍼랜드를 기술한다. 오퍼랜드는 오퍼레이션의 종류에 따라서 다르다.

오퍼레이션

다음은 앞에서 언급한 오퍼레이션 항목에 대한 설명으로 OpenFrame에서 지원하는 오퍼레이션은 다음과 같다.

오퍼레이션 설명

SCAN

SCAN 문 이후에 나온 오퍼레이션만 동작하게 되며 SCAN 문 이전에 나온 오퍼레이션은 동작하지 않는다.

SETFORM

날짜변수의 형식을 지정한다.

SETVAR

변수의 값을 지정한다.

BEGIN

도메인의 시작을 지정한다.

END

도메인의 끝을 지정한다.

위에 설명되지 않은 오퍼레이션은 지원하지 않는다.

3.1. SCAN

SCAN 문 이후에 나온 오퍼레이션만 동작하게 되며 SCAN 문 이전에 나온 오퍼레이션은 동작하지 않는다. JCL 어느곳에도 위치가 가능하며, 한 JCL에 SCAN 문이 두 번 기술될 경우 에러가 발생한다.

  • 사용법

    //*%OPC SCAN

3.2. SETFORM

날짜변수의 형식을 지정한다.

  • 사용법

    //*%OPC SETFORM 날짜변수=(문자열형식)
    항목 설명

    날짜변수

    형식을 지정할 날짜변수를 지정한다. 현재 OpenFrame에서 지원하고 있는 날짜변수는 OCDATE가 있다.

    문자열형식

    날짜변수에 적용할 형식을 지정한다.

    현재 OpenFrame에서 지원하고 있는 키워드는 다음과 같다. 아래 키워드에 해당하지 않는 문자들은 모두 문자열 처리된다.

    • CC: 날짜 중 연도 4자리중 앞 두 자리 숫자를 뜻한다. 사용시 반드시 YY 키워드와 조합하여 사용되어야 한다.

    • YY : 날짜 중 연도 4자리 중 뒤의 두 자리 숫자를 뜻한다.

    • MM : 날짜 중 월을 뜻한다.

    • DDD : 줄리안 날짜를 뜻한다. 문자열 중 D문자가 연속 3개 이상 나올 경우 우선적으로 DDD 키워드가 적용되며, 나머지 문자들은 문자열 처리되거나 DD 키워드로 처리된다.

    • DD : 날짜 중 일을 뜻한다.

  • 사용예제

    다음은 SETFORM 문으로 OCDATE의 형식을 지정하는 예이다. 입력받은 OCDATE가 '19980201’일 경우 다음과 같이 형식을 지정하면 OCDATE 결과는 '032011998’이 된다.

    //*%OPC SETFORM OCDATE=(DDDDDCCYY)

3.3. SETVAR

변수의 값을 지정한다. 현재 OpenFrame에서 지원하는 사용형태는 아래 두 가지이다. SETVAR구문을 사용하는 경우 날짜변수와 단위가 일치하지 않을 경우 에러가 발생한다.

  • 사용법

    //*%OPC SETVAR 변수=(날짜변수 {+|-} nnnTT)
    //*%OPC SETVAR 변수=('문자열')
    항목 설명

    변수

    변수이름을 지정한다. 변수이름은 반드시 'T’로 시작해야 한다.

    날짜변수

    날짜변수를 지정한다. 현재 OpenFrame에서 지원중인 날짜변수는 OCDATE, OYYY, OYY, OMM, ODD가 있다.

    nnn

    0부터 999까지의 숫자를 지정한다.

    TT

    단위를 지정한다.

    현재 OpenFrame에서 지원하는 단위는 아래와 같다.

    • YR: 단위를 연으로 지정한다.

    • MO : 단위를 월로 지정한다.

    • CD : 단위를 달력기준 일로 지정한다.

  • 사용예제

    다음은 SETVAR 문으로 변수를 지정하는 예이다. 입력받은 OCDATE가 '19980507’일 경우 TAA의 값은 '19990507’이 된다.

    //*%OPC SETVAR TAA=(OCDATE+1YR)

3.4. BEGIN

도메인의 시작을 지정한다. BEGIN 문을 사용하는 경우에는 반드시 END 문과 짝을 맞추어 사용해야 하며 BEGIN-END 도메인은 다른 BEGIN-END 도메인과 중첩되거나 교차되어서 사용할 수 없다. COMP 파라미터의 기술된 조건식이 참인 경우 해당 도메인이 동작하게 되고, 거짓인 경우 도메인이 동작하지 않는다.

  • 사용법

    //*%OPC BEGIN ACTION={INCLUDE|EXCLUDE|NOSCAN},COMP((표현식1).{EQ|NE|GE|GT|LE|LT}.(표현식2))
    항목 설명

    INCLUDE

    해당 도메인을 JOB에 포함시킨다.

    EXCLUDE

    해당 도메인을 JOB에 제외시킨다. 현재 지원하지 않으며 기술하는 경우 INCLUDE와 동일하게 동작한다.

    NOSCAN

    해당 도메인에 포함된 영역이 치환되지 않도록 지정한다. 현재 지원하지 않으며 기술하는 경우 INCLUDE와 동일하게 동작한다.

    EQ

    조건 연산자를 '같다' 로 지정한다.

    NE

    조건 연산자를 '다르다' 로 지정한다.

    GE

    조건 연산자를 '크거나 같다' 로 지정한다.

    GT

    조건 연산자를 '크다' 로 지정한다.

    LE

    조건 연산자를 '작거나 같다' 로 지정한다.

    LT

    조건 연산자를 '같다' 로 지정한다.

  • 사용예제

    다음은 BEGIN 문으로 사용 예이다. 입력받은 OCDATE가 '19980507’일 경우 COMP 파라미터의 조건식이 참이 되어 도메인이 동작하게 되어 SETVAR로 지정한 TBB 변수가 설정된다.

    //*%OPC BEGIN ACTION=INCLUDE,COMP(&OCDATE..EQ.(19980507))
    //*%OPC SETVAR TBB=(OCDATE+1YR)
    //*%OPC END ACTION=INCLUDE

3.5. END

도메인의 끝을 지정한다.

  • 사용법

    //*%OPC END ACTION={INCLUDE|EXCLUDE|NOSCAN}
    항목 설명

    INCLUDE

    해당 도메인을 JOB에 포함시킨다.

    EXCLUDE

    해당 도메인을 JOB에 제외시킨다. 현재 지원하지 않으며 기술하는 경우 INCLUDE와 동일하게 동작한다.

    NOSCAN

    해당 도메인에 포함된 영역이 치환되지 않도록 지정한다. 현재 지원하지 않으며 기술하는 경우 INCLUDE와 동일하게 동작한다.