CS Student’s SAP&Tech Journey✨

[SAP] SELECT SINGLE과 SELECT의 차이 / 변수 접두사 정의하기 본문

SAP/ABAP 문법 | Open SQL

[SAP] SELECT SINGLE과 SELECT의 차이 / 변수 접두사 정의하기

인포마틱 2025. 1. 31. 01:46

ABAP에서는 SELECT문을 사용하여 데이터베이스 테이블에서 정보를 조회할 수 있습니다. 이번 포스팅에서는 SE11/SE16을 활용한 테이블 검색SELECT SINGLE과 SELECT의 차이점, 그리고 SCARR 테이블을 활용한 항공사 코드 조회 프로그램을 다루겠습니다.

 


 

🟩 SE11/SE16을 활용한 테이블 검색 🚀

SAP에서 테이블 구조를 확인하고 데이터를 조회할 때, SE11과 SE16 트랜잭션을 사용할 수 있습니다.

1. SE11 (ABAP Dictionary)

SE11을 사용하면 특정 테이블의 구조, 필드, 도메인, 데이터 요소 등을 확인할 수 있습니다.

  1. 트랜잭션 코드 SE11 실행
  2. 테이블 이름 입력 (예: SCARR)
  3. "Display" 버튼 클릭
  4. 테이블 구조 및 필드 확인

2. SE16 (Data Browser)

SE16을 사용하면 테이블 데이터를 직접 조회할 수 있습니다.

  1. 트랜잭션 코드 SE16 실행
  2. 테이블 이름 입력 (예: SCUSTOM)
  3. 엔터 키 입력 후 필터 조건 설정 가능
  4. 실행 버튼 클릭하여 데이터 확인

 

TABLE: SCARR

  • 테이블의 칼럼은 총 5개입니다.
  • 테이블의 KEY(테이블의 행을 유니크하게 결정짓는 속성)은 MANDT, CARRID이나 MANDT는 기본 조건인 클라이언트이므로 CARRID를 조건으로 사용합니다.
  • 전체 데이터의 개수는 Contents - Number of Entries를 통해 볼 수 있습니다.
  • 전체 데이터 리스트는 Contents - 실행버튼을 통해 볼 수 있습니다.

 

변수, 스트럭처, 테이블

 

🟩 SELECT SINGLE과 SELECT의 차이

1. SELECT SINGLE 

SELECT SINGLE 필드 혹은 * INTO 담을 변수, 스트럭처 FROM 테이블명 WHERE 조건

  • 특정 조건을 만족하는 한 개의 행을 조회할 때 사용합니다.
  • 결과를 변수 또는 구조(Structure)에 저장합니다.
  • 따라서 INTO 뒤에는 단일 변수 또는 구조(structure)가 와야 합니다.
  • SELECT SINGLE은 조건을 만족하는 하나의 레코드만 조회합니다.
  • 인덱스를 활용하여 빠르게 검색할 수 있지만, 같은 조건을 만족하는 여러 개의 레코드가 있어도 첫 번째 레코드만 반환합니다.
SELECT SINGLE 필드1, 필드2 
  INTO 변수 혹은 스트럭처
  FROM 테이블명
  WHERE 조건.
DATA: ls_scarr TYPE scarr.
SELECT SINGLE * FROM scarr INTO ls_scarr WHERE carrid = 'LH'.
WRITE: / '항공사 이름:', ls_scarr-carrname.
WRITE: / 'URL:', ls_scarr-url.

 

2. SELECT  

  • SELECT... INTO TABLE은 조건을 만족하는 모든 레코드를 내부 테이블에 저장합니다.
  • 여러 개의 행을 조회할 때 사용합니다.
  • 결과를 내부 테이블에 저장해야 합니다.
  • INTO 뒤에는 내부 테이블이 와야 합니다.
SELECT 필드1, 필드2 
  INTO TABLE itab
  FROM 테이블명
  WHERE 조건.
DATA: lt_scarr TYPE TABLE OF scarr.
SELECT * FROM scarr INTO TABLE lt_scarr WHERE carrid = 'LH'.

IF sy-subrc = 0.
    WRITE: / '데이터 조회 성공'.
ELSE.
    WRITE: '데이터가 없습니다.'.
ENDIF.
  • 위 코드는 LH 항공사에 대한 모든 레코드를 lt_scarr 내부 테이블에 저장합니다.
  • SELECT SINGLE과 달리, 조건에 맞는 모든 데이터를 가져옵니다.

 

3. SELECT... ENDSELECT

  • SELECT SINGLE은 단일 레코드를 빠르게 조회하는 데 사용됩니다.
  • SELECT... ENDSELECT는 조건을 만족하는 모든 데이터를 반복적으로 조회합니다.
DATA: ls_scarr TYPE scarr.
SELECT * FROM scarr INTO ls_scarr WHERE carrid = 'LH'.
    WRITE: / ls_scarr-carrid, ls_scarr-carrname.
ENDSELECT.

 

 

 

🟩 SCARR에서 항공사 코드로 이름과 URL을 출력하는 프로그램 구현

SCARR 테이블

PARAMETERS lv_cid TYPE S_CARR_ID. " DATA ELEMENTS에서 가져온 DATA TYPE인 S_CARR_ID 사용(글로벌 타입)
DATA gs_scarr TYPE SCARR. " SCARR와 같은 구조체 gs_scarr 정의

SELECT SINGLE *
  FROM SCARR
  INTO gs_scarr
  WHERE carrid = lv_cid.

IF sy-subrc <> 0.
  WRITE: / 'sorry not found'.
ELSE.
  WRITE: '항공사 이름과 이메일은:', gs_scarr-carrname, gs_scarr-url.
ENDIF.

 

📌ABAP 변수 선언할 때 접두사 의미

DATA: gv_total TYPE i,      " 전역 변수 (Global Variable)
      lv_count TYPE i,      " 로컬 변수 (Local Variable)
      pv_input TYPE string, " 입력 파라미터 (Parameter Variable)
      ev_result TYPE i,     " 반환값 (Export Variable)
      gs_order TYPE zorder, " 전역 구조체 (Global Structure)
      is_order TYPE zorder, " 입력 구조체 (Input Structure)
      wa_order TYPE zorder, " 워크 에어리어 (Work Area)
      it_orders TYPE TABLE OF zorder. " 내부 테이블 (Internal Table)