지난 글에서는 Internal Table의 기본 활용법을 살펴봤습니다.
이번 글에서는 ABAP에서 SELECT 구문을 활용해 DB 데이터를 읽고 Internal Table에 담는 방법을 정리해보겠습니다.
SAP ERP의 모든 데이터는 DB 테이블에 저장되어 있고,
ABAP 프로그램은 이 데이터를 SELECT 구문을 통해 불러와 가공합니다.
따라서 SELECT는 ABAP 개발에서 가장 기본적이면서도 중요한 문법입니다.
SELECT 필드명1 필드명2 ...
FROM 테이블명
INTO 변수명
WHERE 조건.
특정 조건에 맞는 한 건만 조회할 때 사용합니다.
단일필드
DATA gv_carrname TYPE scarr-carrname.
SELECT SINGLE carrname
FROM scarr
INTO gv_carrname
WHERE carrid = 'AA'.
WRITE: / '항공사 이름:', gv_carrname.
여러 필드
DATA : gv_carrid TYPE scarr-carrid,
gv_carrname TYPE scarr-carrname.
SELECT SINGLE carrid carrname
FROM scarr
INTO (gv_carrid, gv_carrname)
WHERE carrid = 'AA'.
WRITE: / gv_carrid, gv_carrname.
구조체로 받기
DATA : BEGIN OF gs_scarr,
carrid TYPE scarr-carrid,
carrname TYPE scarr-carrname,
END OF gs_scarr.
SELECT SINGLE carrid carrname
FROM scarr
INTO gs_scarr
WHERE carrid = 'AA'.
조건에 맞는 여러 건을 Internal Table로 가져올 수 있습니다.
DATA : BEGIN OF gs_scarr,
carrid TYPE scarr-carrid,
carrname TYPE scarr-carrname,
END OF gs_scarr,
gt_scarr LIKE TABLE OF gs_scarr.
SELECT carrid carrname
FROM scarr
INTO TABLE gt_scarr.
INTO TABLE 구문은 SELECT한 필드 순서와 Internal Table 구조체의 필드 순서가 동일해야 합니다.
하지만 필드명이 같더라도 순서가 다르면 에러가 발생합니다.
이럴 때는 INTO CORRESPONDING FIELDS OF TABLE을 사용합니다.
치기 어렵다면 C+TAB만 누르면 자동완성...
DATA : BEGIN OF gs_scarr,
carrname TYPE scarr-carrname,
carrid TYPE scarr-carrid,
END OF gs_scarr,
gt_scarr LIKE TABLE OF gs_scarr.
SELECT carrid carrname
FROM scarr
INTO CORRESPONDING FIELDS OF TABLE gt_scarr.
SELECT 순서는 carrid → carrname
Work Area 순서는 carrname → carrid
하지만 필드명을 기준으로 자동 매핑되므로 문제없이 저장됩니다.
👉 정리:
IN 조건
SELECT carrid carrname
FROM scarr
INTO TABLE gt_scarr
WHERE carrid IN ('AA', 'LH', 'KE').
BETWEEN 조건 (범위 검색)
SELECT carrid carrname
FROM scarr
INTO TABLE gt_scarr
WHERE carrid BETWEEN 'AA' AND 'ZZ'.
DATA : gt_carrid TYPE TABLE OF scarr-carrid,
gs_carrid TYPE scarr-carrid.
gs_carrid = 'AA'. APPEND gs_carrid TO gt_carrid.
gs_carrid = 'LH'. APPEND gs_carrid TO gt_carrid.
IF gt_carrid IS NOT INITIAL. "⚠ 반드시 체크
SELECT carrid carrname
FROM scarr
INTO TABLE gt_scarr
FOR ALL ENTRIES IN gt_carrid
WHERE carrid = gt_carrid.
ENDIF.
⚠ gt_carrid가 비어 있으면 전체 데이터가 조회되므로 반드시 IS NOT INITIAL 체크 필요.
SELECT DISTINCT carrid
FROM spfli
INTO TABLE gt_carrid
ORDER BY carrid.
(1) @ 기호 사용
SELECT carrid, carrname
FROM scarr
INTO TABLE @gt_scarr
WHERE carrid = @gv_carrid.
(2) Inline Declaration
SELECT SINGLE carrid, carrname
FROM scarr
WHERE carrid = @gv_carrid
INTO @DATA(ls_scarr).
(3) JOIN 활용
SELECT FROM spfli AS a
INNER JOIN scarr AS b
ON a~carrid = b~carrid
FIELDS a~carrid, a~connid, b~carrname
INTO TABLE @DATA(gt_join).
이번 글에서는 ABAP의 SELECT 기초를 정리했습니다.