ABAP에서 RANGES를 사용하여 SELECT-OPTIONS 형식의 변수 만드는 방법


SAP에서 ABAP으로 Report 프로그램을 개발할 때 검색 조건을 입력 받기 위해 PARAMETER와 SELECT-OPTIONS 키워드를 사용하게 됩니다.
단일 조건 값을 입력 받을 때 PARAMETER를 주로 사용하게 되고, 인터널테이블 형식으로 다중 조건 값을 입력 받을 때 SELECT-OPTIONS를 사용하게 됩니다.

SELECT-OPTIONS를 사용할 경우 다양한 옵션을 지정할 수 있어 무척 편리하게 사용할 수 있습니다.
SELECT-OPTIONS로 입력 받은 변수는 SQL Query 문에서 ‘IN’ 키워드를 사용하여 쉽게 검색 데이터를 가져올 수 있습니다.

리포트 프로그램의 SELECTION-SCREEN에서 SELECT-OPTIONS로 변수를 선언하지 않아도 RANGES 키워드를 사용하거나 인터널테이블 형식을 직접 선언해서 동일한 형식의 변수를 만들어 사용할 수 있습니다.

SELECT-OPTIONS를 사용할 수 없는 스크린 프로그램(On-Line Program)에서는 이렇게 직접 SELECT-OPTIONS 변수를 만들어 사용하면 됩니다.

이번 글에서는 ABAP에서 RANGES를 사용하여 SELECT-OPTIONS 형식의 변수 만드는 방법 3가지에 대해 알아보겠습니다.

ABAP에서 RANGES를 사용하여 SELECT-OPTIONS 형식의 변수 만드는 방법

ABAP에서 Range Table(범위 테이블)을 만드는 3가지 방법

▶ 첫 번째로 인터널 테이블을 만들 때서 Range Table 형식으로 선언해서 만드는 방법입니다.

DATA: BEGIN OF so_sel OCCURS 0,
        SIGN(1),
        OPTION(2),
        LOW LIKE f,
        HIGH LIKE f,

      END OF so_sel.

  • 위와 같이 선언을 해 주면 so_sel 이라는 인터널 테이블이 만들어 지면서 Range Table의 성격을 가지게 됩니다.


▶ 두 번째는 RANGES 키워드를 사용하여 Range Table을 만드는 방법입니다.

RANGES so_sel FOR ztest-name.

  • 위와 같이 선언을 해 주면 ztest 테이블의 name 컬럼의 데이터 형식을 갖는 so_sel 이라는 Range Table이 만들어 지게 됩니다.


▶ 세 번째는 DATA 선언에서 TYPE RANGE OF를 사용해서 Range Table을 만드는 방법입니다.

DATA so_sel TYPE RANGE OF ztest-name.

  • 위와 같이 선언을 해 주면 ztest 테이블의 name 컬럼의 데이터 형식을 갖는 so_sel 이라는 Range Table이 만들어 지게 됩니다.

Range Table(범위 테이블)에 대한 이해

Range Table(범위 테이블)은 쿼리 문이나 IF 문 또는 LOOP 등에서 “IN” 관계 연산자를 사용할 수 있는 특수한 구조의 인터널 테이블입니다.

1) SIGN : 포함할 것인지? 배제할 것인지? 선택 구성 요소
    ‘I‘ for “Inclusive”
    ‘E‘ for “Exclusive”

2) OPTION : Low와 High에서 받은 값을 어떻게 처리할 것인지 선택 구성 요소
    EQ  (EQual)
    BT  (BeTween … and …)
    CP  (Contains Pattern)
    LE  (Less than or Equal)
    GE  (Greater than or Equal)
    NE  (Not Equal to)
    NB  (Not Between … and …)
    NP  (Not contains Pattern)
    GT  (Greater Than)
    LT  (Less Than)

3) LOW : Low 입력 값 구성 요소
    – the comparison value
    – with BT, this is the lower limit of the range.

4) HIGH : High 입력 값 구성 요소
    – with BT and NB,  the higher limit of the range

SELECT-OPTONS 범위 테이블(Range Table) 사용 예제

▶ 앞에서 만든 Range Table을 ABAP에서 실제 사용하는 예제 입니다.

MOVE: ‘I’ TO so_sel-SIGN,
      ‘EQ’ TO so_sel-OPTION,
      ‘12345’ TO so_sel-LOW.    ” HIGH 생략 가능
APPEND so_sel. CLEAR so_sel.
 
so_sel-SIGN = ‘I’
so_sel-OPTION = ‘BT’.
so_sel-LOW = ‘AAA’.
so_sel-HIGH = ‘DDD’.
APPEND so_sel. CLEAR so_sel.
 
SELECT name INTO wa_name
    FROM ZTEST
   WHERE name IN so_sel.
 
   WRITE :/ wa_name.
 
ENDSELECT.

▷ 결과 : 12345, AAA에서 DDD까지의 데이터

결론

Range Table(범위 테이블)은 다양한 곳에서 사용할 수 있습니다. SQL 쿼리에서 IN 뿐만 아니라 IF 문이나 LOOP 문에서도 활용할 수 있습니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기