CS Student’s SAP&Tech Journey✨

[SAP] 인터널 테이블(Internal Table) (3) 테이블에서 데이터 읽기 본문

SAP/인터널 테이블 Internal Table

[SAP] 인터널 테이블(Internal Table) (3) 테이블에서 데이터 읽기

인포마틱 2025. 2. 7. 21:28

SAP ABAP에서 데이터를 다룰 때 인터널 테이블(Internal Table, IT)은 필수적인 개념입니다.
인터널 테이블은 프로그램 실행 중 메모리에 저장되는 임시 데이터 테이블로, 대량의 데이터를 효과적으로 저장하고 조작하는 데 활용됩니다.

이번 글에서는 데이터를 읽는 다양한 방법에 대해을 상세히 알아보겠습니다.

 

 


인터널 테이블에서 데이터 삽입하는 방법
과 관련된 포스팅 보러가기⬇️

 

ABAP 프로그래밍: 인터널 테이블(Internal Table) (2) 테이블에 데이터 삽입하기

SAP ABAP에서 데이터를 다룰 때 인터널 테이블(Internal Table, IT)은 필수적인 개념입니다. 인터널 테이블은 프로그램 실행 중 메모리에 저장되는 임시 데이터 테이블로, 대량의 데이터를 효과적으로

informatik.tistory.com


 

 

1. READ TABLE을 사용한 데이터 읽기

특정한 한 개의 데이터를 가져오는 방법이며, Index 또는 Key를 이용해서 검색한다.

 

READ TABLE (INDEX 방식 - 위치로 데이터 조회)

READ TABLE gt_flight INTO gw_flight INDEX 2. "INDEX 2에 해당하는 데이터가 gw_flight에 담긴다.
WRITE: / gw_flight-carrid, gw_flight-connid.

📌 특징

  • 인덱스(Index)는 1부터 시작
  • 정렬 순서에 따라 결과가 달라질 수 있음
  • 데이터가 항상 같은 위치에 있는 경우 사용 가능

 

✅ READ TABLE (KEY 방식 - 특정 값으로 조회)

READ TABLE gt_flight INTO gw_flight WITH KEY carrid = 'AA'.
WRITE: / gw_flight-carrid, gw_flight-connid.

📌 특징

  • 특정 키 값을 기준으로 데이터를 검색
  • Hashed Table 또는 Sorted Table에서 빠른 검색 가능
  • 중복된 값이 있을 경우, 첫 번째 값을 반환

 

2. LOOP AT을 사용한 데이터 읽기

인터널 테이블의 모든 데이터를 하나씩 읽어서 처리할 때 사용하며, 특정 조건을 만족하는 데이터만 필터링 가능합니다.

✅ LOOP AT (전체 데이터 조회)

LOOP AT gt_flight INTO gw_flight.
  WRITE: / gw_flight-carrid, gw_flight-connid.
ENDLOOP.

📌 특징

  •  특정 키 값을 기준으로 데이터를 검색
  • Hashed Table 또는 Sorted Table에서 빠른 검색 가능
  • 중복된 값이 있을 경우, 첫 번째 값을 반환

 

✅ LOOP AT (WHERE 조건을 활용한 필터링)

LOOP AT gt_flight INTO gw_flight WHERE percentage > '90.00'.
  WRITE: / gw_flight-carrid, gw_flight-connid, gw_flight-percentage.
ENDLOOP.

📌 특징

  • 특정 조건(WHERE)을 만족하는 데이터만 읽을 수 있음
  • 읽기 성능이 향상됨 (불필요한 데이터 제외 가능)

 

3. SELECT INTO TABLE을 활용한 데이터 읽기 (DB 조회 후 인터널 테이블에 저장)

데이터베이스(DB)에서 데이터를 가져와 인터널 테이블에 저장하는 방식이다.

✅ SELECT INTO TABLE을 사용한 데이터 가져오기

SELECT * FROM SFLIGHT INTO TABLE gt_flight WHERE CARRID = 'AA'.

📌 특징

  •  DB에서 직접 데이터를 가져와 인터널 테이블을 채움
  • 조건(WHERE)을 사용해 원하는 데이터만 가져올 수 있음
  • 한 번에 여러 개의 데이터를 가져와 효율적

 

4. 유틸 클래스를 활용한 인터널 테이블 읽기 (cl_demo_output)

인터널 테이블의 데이터를 보기 좋게 출력할 때 사용한다. 디버깅할 때 유용하게 사용한다.

cl_demo_output=>display_data( gt_flight ). " 인터널 테이블 전체 데이터 출력

📌 특징

  • 코드 한 줄로 테이블 전체 데이터를 출력 가능
  • 개별 WRITE 없이 자동으로 정리된 포맷 제공
  • 디버깅 시 빠르게 데이터 확인 가능

 

5. FOR ALL ENTRIES을 활용한 데이터 읽기 (대량 데이터 조회 최적화)

인터널 테이블의 데이터를 기반으로 DB에서 데이터를 가져올 때 사용한다.

✅ FOR ALL ENTRIES를 사용한 데이터 필터링

SELECT * FROM SFLIGHT INTO TABLE gt_flight
  FOR ALL ENTRIES IN gt_request
  WHERE CARRID = gt_request-carrid.

📌 특징

  • 인터널 테이블(gt_request)과 매칭되는 데이터만 DB에서 가져올 수 있음
  •  JOINS를 사용하지 않고도 테이블 간 관계를 설정 가능

 

 

6. 정리

방법 설명 특징
1. READ TABLE (INDEX 방식) 특정 위치(Index)에서 데이터를 읽음 데이터 위치를 알고 있을 때 유용
2. READ TABLE (KEY 방식) 특정 키 값으로 데이터를 검색 Sorted / Hashed Table에서 빠름
3. LOOP AT 모든 데이터를 순차적으로 읽음 조건을 추가하여 필터링 가능
4. SELECT INTO TABLE DB에서 데이터를 가져와 인터널 테이블로 저장 SQL을 사용해 효율적 검색 가능
5. FOR ALL ENTRIES 인터널 테이블을 기반으로 DB 조회 대량 데이터 조회 시 최적화 가능
6. 유틸 (cl_demo_output) 인터널 테이블 데이터를 보기 좋게 출력 디버깅 및 데이터 확인에 유용

💡 인터널 테이블의 특정 데이터를 가져올 때? → READ TABLE WITH KEY
💡 인터널 테이블의 모든 데이터를 조회할 때? → LOOP AT
💡 DB에서 데이터를 가져와 인터널 테이블에 저장할 때? → SELECT INTO TABLE
💡 인터널 테이블을 기준으로 DB 데이터를 가져올 때? → FOR ALL ENTRIES
💡 디버깅 및 데이터 출력이 필요할 때? → cl_demo_output=> display_data()

 

🎯 헷갈리는 포인트

  • SELECT → DB에서 데이터를 직접 읽어오는 것
  • READ TABLE → 이미 생성된 인터널 테이블에서 데이터를 읽는 것(메모리(인터널 테이블) 조회)