SAP - ABAP ( SELECT 기초 )

misohb·2025년 9월 17일

ABAP

목록 보기
3/3

지난 글에서는 Internal Table의 기본 활용법을 살펴봤습니다.

이번 글에서는 ABAP에서 SELECT 구문을 활용해 DB 데이터를 읽고 Internal Table에 담는 방법을 정리해보겠습니다.

SAP ERP의 모든 데이터는 DB 테이블에 저장되어 있고,
ABAP 프로그램은 이 데이터를 SELECT 구문을 통해 불러와 가공합니다.
따라서 SELECT는 ABAP 개발에서 가장 기본적이면서도 중요한 문법입니다.

SELECT 기본 문법

SELECT 필드명1 필드명2 ...
  FROM 테이블명
  INTO 변수명
  WHERE 조건.
  • INTO 변수명 → 단일 레코드(Work Area, 변수)에 저장
  • INTO TABLE itab → 여러 건을 Internal Table에 저장
  • INTO CORRESPONDING FIELDS OF TABLE itab → 여러 건을 필드명 기준으로 매핑

1. 한 건 읽기 (SELECT SINGLE)

특정 조건에 맞는 한 건만 조회할 때 사용합니다.

단일필드

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'.

2.여러 건 읽기 (SELECT INTO TABLE)

조건에 맞는 여러 건을 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.

3. INTO CORRESPONDING FIELDS OF TABLE

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
하지만 필드명을 기준으로 자동 매핑되므로 문제없이 저장됩니다.

👉 정리:

  • INTO TABLE → 필드 순서 일치 필요 (성능 ↑)
  • INTO CORRESPONDING FIELDS OF TABLE → 필드명 기준 매핑 (유연성 ↑)

4. 조건 검색 (WHERE)

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'.

5. Internal Table 기반 조회 (FOR ALL ENTRIES)

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 체크 필요.

  • 성능 향상을 위해 항상 중복을 제거한 다음에 해당 구문을 사용합니다.

6. 정렬 및 중복 제거

SELECT DISTINCT carrid
  FROM spfli
  INTO TABLE gt_carrid
  ORDER BY carrid.

SAP HANA 이후 달라진 Open SQL 문법

(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 기초를 정리했습니다.

  • SELECT SINGLE → 한 건 조회 (여러 필드 가능)
  • SELECT INTO TABLE → 다건 조회
  • INTO CORRESPONDING FIELDS OF TABLE → 필드명 기준 매핑
  • WHERE, IN, BETWEEN → 조건 검색
  • FOR ALL ENTRIES → Internal Table 기반 조회 (IS NOT INITIAL 체크 필수)
  • DISTINCT, ORDER BY → 중복 제거 및 정렬
  • SAP HANA 이후 → @, @DATA, JOIN 등 신문법 도입
profile
ABAP 개발자

0개의 댓글