쌓고 쌓다
[ABAP] ENUM 키워드! 변수에 정해진 값만 할당되도록 제한하기 본문
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-Y )
( NAME = 'B' SMOKE = SMOKE-N )
).
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 = N )
( NAME = 'B' SMOKE = Y )
).
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-Y )
( NAME = 'B' SMOKE = SMOKE-N )
).
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 타입을 어떻게 적절히 조건문으로 사용할 수 있도록 변환을 해야 할지도 생각해봐야 한다...
'SAP > ABAP' 카테고리의 다른 글
| Internal Table 종류와 Binary Search, OCCURS 0 구문 (0) | 2025.11.04 |
|---|---|
| [ABAP] TOP OF PAGE, TABLE 구조로 그리기 (0) | 2025.10.21 |
| [ABAP] ALV에서 Quantity 타입 필드 값 소수점 표시 관리하기 (0) | 2025.10.18 |
| [ABAP] 메일에 Internal Table을 Excel로 첨부하기 (2) | 2025.10.17 |
| [ABAP] HTML 이메일 전송, String으로 Excel 파일 첨부, 한글 깨짐 문제 (0) | 2025.10.16 |