쌓고 쌓다

[ABAP] ENUM 키워드! 변수에 정해진 값만 할당되도록 제한하기 본문

SAP/ABAP

[ABAP] ENUM 키워드! 변수에 정해진 값만 할당되도록 제한하기

승민아 2025. 10. 20. 11:30
반응형

ENUM?

ABAP의 Domain을 정의할 때

Value Range(Fixed Value)로 정해진 값들만 DB에 들어갈 수 있도록 할 수 있었다.

 

Value Range(Fixed Value)의 단점이 하나 존재한다.

 

바로 컴파일(Active) 단계에서 문제를 미리 잡을 수 없다는 것이다.

위의 코드를 보자.

흡연 여부에는 3가지 값(Y, N, 공백)만이 가능하다.

그러나 컴파일 단계에서는 이 3가지의 값 외의 값이 들어갈 수 있다.

 

이런 상황을 방지하고 미리 컴파일(Active) 단계 또는 프로그램 코드 단계에서

값의 제한을 둘 수 있는 방법이 ENUM 키워드이다.

 

 

 

ENUM 구문은 위와 같다.

 

" If the BASE TYPE addition is not specified, the default base type is i."

BASE TYPE을 명시하지 않으면 I 타입이 된다.

 

" IS INITIAL generates the initial value of the base type

IS INITIAL을 통해 BASE TYPE의 기본값이 들어간다.

IS INITIAL은 꼭 하는 걸 권장? 제한? 한다.

 

참고 : https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-us/abaptypes_enum.htm

 

1. ENUM STRUCTURE

 

Internal Table에 들어간 ENUM의 타입이 궁금해서 찍어보았다.

데이터 타입이 ENUM이다.

 

 

1.2 ENUM STRUCTURE

 

전체 코드

더보기

TYPES BEGIN OF ENUM SMOKE STRUCTURE SMOKE BASE TYPE CHAR1,
          Y VALUE IS INITIAL,
          N VALUE 'N',
        END OF ENUM SMOKE STRUCTURE SMOKE.

TYPES BEGIN OF TY_PERSON,
          NAME  TYPE ZS4H086T06-NAME,
          SMOKE TYPE SMOKE" 흡연 여부
        END OF TY_PERSON.

DATA GT_PERSON TYPE TABLE OF TY_PERSON.

INITIALIZATION.

  GT_PERSON VALUE #(
      NAME 'A' SMOKE SMOKE-)
      NAME 'B' SMOKE SMOKE-)
    ).

START-OF-SELECTION.

  LOOP AT GT_PERSON ASSIGNING FIELD-SYMBOL(<FS_PERSON>WHERE SMOKE SMOKE-Y.
    WRITE:/ <FS_PERSON>-NAME.
  ENDLOOP.

 

 

2. ENUM BASETYPE

 

 

 

전체코드

더보기

TYPES BEGIN OF ENUM SMOKE BASE TYPE CHAR1,  " If the BASE TYPE addition is not specified, the default base type is i.
          Y VALUE IS INITIAL,                  " IS INITIAL generates the initial value of the base type
          N VALUE 'N',
        END OF ENUM SMOKE.

TYPES BEGIN OF TY_PERSON,
          NAME  TYPE ZS4H086T06-NAME,
          SMOKE TYPE SMOKE" 흡연 여부
        END OF TY_PERSON.

DATA GT_PERSON TYPE TABLE OF TY_PERSON.

INITIALIZATION.

  GT_PERSON VALUE #(
      NAME 'A' SMOKE )
      NAME 'B' SMOKE )
    ).

START-OF-SELECTION.

  LOOP AT GT_PERSON ASSIGNING FIELD-SYMBOL(<FS_PERSON>WHERE SMOKE Y.
    WRITE:/ <FS_PERSON>-NAME.
  ENDLOOP.

 

3. DB에 INSERT 하는 예제

테이블의 구조이다.

 

 

 

 

 

전체 코드

더보기

TYPES BEGIN OF ENUM SMOKE STRUCTURE SMOKE BASE TYPE ZS4H086T06-SMOKE,
          Y       VALUE 'Y',
          N       VALUE 'N',
          UNKNOWN VALUE IS INITIAL,
        END OF ENUM SMOKE STRUCTURE SMOKE.

TYPES BEGIN OF TY_PERSON,
          NAME  TYPE ZS4H086T06-NAME,
          SMOKE TYPE SMOKE" 흡연 여부
        END OF TY_PERSON.

DATA GT_PERSON TYPE TABLE OF TY_PERSON.

INITIALIZATION.

  GT_PERSON VALUE #(
      NAME 'A' SMOKE SMOKE-)
      NAME 'B' SMOKE SMOKE-)
    ).

START-OF-SELECTION.
  DATA GT_DB_PERSON TYPE TABLE OF ZS4H086T06.
  GT_DB_PERSON CORRESPONDING #GT_PERSON ).
  INSERT ZS4H086T06 FROM TABLE GT_DB_PERSON.

 

ENUM 타입을 가지고 DB CRUD나 조건문을 걸 때

ENUM 타입을 어떻게 적절히 조건문으로 사용할 수 있도록 변환을 해야 할지도 생각해봐야 한다...

반응형