- RANGES와 SELECT-OPTIONS 둘 다 SELECTION-SCREEN에서 범위를 지정하기 위해 사용하는데 둘 사이의 차이점을 알아보도록 하자.
- 일단 시작하기 앞서 SELECT-OPTIONS와 RANGES의 필드 구조를 먼저 보자.
1. SIGN - 포함여부 I(INCLUDE) 포함, E(EXCLUDE) 제외 2. OPTION - 논리연산자 EQ - EQUAL NE - NOT EQUAL LE - LESS OR EQUAL LT - LESS THAN GE - GREATER OR EQUAL GT - GREATER THAN BT - BETWEEN NB - NOT BETWEEN CP - CONTAINS PATTERN ( SQL문의 IN과 같다고 함) NP - DOES NOT CONTAIN PATTERN ( SQL문의 NOT IN과 같다고 함) 3. LOW 하위 값 4. HIGH 상위 값
1. RANGES
SELECTION-SCREEN에 보여지지 않는다.
프로그램 내에서 직접 선언해야 한다. (INTERNAL TABLEF로 만들어 짐)
예제1과 예제2는 똑같이 다음과 같이 셋팅 함.
SIGN='I' - INCLUDE (포함) OPTION = 'BT' BETWEEN (사이) LOW = 'AA' A부터 HIGH = 'LH' LH까지
* RANGES 예제1)
* RANGES로 S_CARID2라는 RAGES 변수를 생성하고, SIGN, OPTION, LOW, HIGH 값을 셋팅한 후 APPEND로 INTERNAL TABLE에 값을 추가한다. 즉, SIGN, OPTION, LOW, HIGH필드를 직접 셋팅한 후, RANGES 변수(INTERNAL TABLE)인 S_CARID2에 넣겠다는 소리.
SELECT * FROM SPFLI WHERE CARRID IN @S_CARID2 INTO TABLE @DATA(SPFLI_TAB2). BREAK-POINT.
* RANGES 예제2) TYPES CARRID_RANGE TYPE RANGE OF SPFLI-CARRID. DATA(carrid_range) = VALUE carrid_range( ( sign = 'I' option = 'BT' low = 'AA' high = 'LH') ). SELECT * FROM SPFLI WHERE CARRID IN @CARRID_RANGE INTO TABLE @DATA(SPFLI_TAB3). BREAK-POINT.
우선, SPFLI_TAB2와 SPFLI_TAB3 테이블들에 들어가있는 데이터들은 같아야 한다. SPFLI테이블에서 CARRID가 AA부터 LH까지인 데이터의 갯수를 먼저 파악해보자!
16개의 데이터가 SPFLI_TAB2와 SPFLI_TAB3에 들어야 있어야 하며, 나머지 CONNID, CITYFROM 등 모두 데이터가 동일해야 한다.
SPFLI_TAB2의 데이터를 보자.
다음으로 SPFLI_TAB3의 데이터를 보자.
둘 다 동일하며, SPFLI 테이블에서 CARRID가 AA와 LH사이의 모든 데이터들을 가져왔다.
즉, RAGES는 SELECT-OPTIONS와 다르게 SELECTION-SCREEN에 보여지진 않지만, 프로그램 내에서 가져올 데이터들의 RANGE를 직접 정해서 가져올 때 사용된다고 보면 될 것 같다.
2. SELECT-OPTION
SELECTION-SCREEN에 보여진다.
SELECT-OPTIONS 변수가 자동으로 생성된다. (INTERNAL TABLE로 만들어 짐)
SELECT-OPTIONS으로 S_CARRID를 만들면 INTERNAL TABLE이 스스로 만들어진다! RANGES와는 다름! 이때, S_CARRID를 만들기 위해 사용된 SPFLI_WA-CARRID에 뭐가 들어있는지 확인해보자.
SPFLI_WA-CARRID에는 다음과 같은 항목들이 담겨져 있다. (돋보기를 누르면 다음과 같은 POSSIBLE ENTRY 뜸)
그럼 프로그램을 실행했을 때, SPFLI_WA-CARRID와 같은 POSSIBLE ENTRY가 뜨는지 확인해보자.
동일한 POSSIBLE ENTRY가 뜬다!
즉, 코드에서 SELECT-OPTIONS s_carrid FOR spfli_wa-carrid. 구문은 SPFLI_WA-CARRID에서 POSSIBLE ENTRY를 가져와 S_CARRID라는 변수(INTERNAL TABLE)에 자동으로 할당해 주는 것을 알 수 있다.