CS Student’s SAP&Tech Journey✨
[SAP] SELECT SINGLE과 SELECT의 차이 / 변수 접두사 정의하기 본문
ABAP에서는 SELECT문을 사용하여 데이터베이스 테이블에서 정보를 조회할 수 있습니다. 이번 포스팅에서는 SE11/SE16을 활용한 테이블 검색, SELECT SINGLE과 SELECT의 차이점, 그리고 SCARR 테이블을 활용한 항공사 코드 조회 프로그램을 다루겠습니다.
🟩 SE11/SE16을 활용한 테이블 검색 🚀
SAP에서 테이블 구조를 확인하고 데이터를 조회할 때, SE11과 SE16 트랜잭션을 사용할 수 있습니다.
1. SE11 (ABAP Dictionary)
SE11을 사용하면 특정 테이블의 구조, 필드, 도메인, 데이터 요소 등을 확인할 수 있습니다.
- 트랜잭션 코드 SE11 실행
- 테이블 이름 입력 (예: SCARR)
- "Display" 버튼 클릭
- 테이블 구조 및 필드 확인
2. SE16 (Data Browser)
SE16을 사용하면 테이블 데이터를 직접 조회할 수 있습니다.
- 트랜잭션 코드 SE16 실행
- 테이블 이름 입력 (예: SCUSTOM)
- 엔터 키 입력 후 필터 조건 설정 가능
- 실행 버튼 클릭하여 데이터 확인
- 테이블의 칼럼은 총 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을 출력하는 프로그램 구현
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)
'SAP > ABAP 문법 | Open SQL' 카테고리의 다른 글
[SAP] 집계 함수(Aggregate Function) - MIN, MAX, SUM, COUNT, GROUP BY, HAVING (0) | 2025.02.14 |
---|---|
[SAP] SELECT * / SELECT SINGLE 필드 / SELECT SINGLE * 총정리 (0) | 2025.02.08 |
[SAP] 시스템 변수 SY-XXXX 한눈에 정리하기 (0) | 2025.01.30 |
[SAP] 반복문 DO, WHILE (0) | 2025.01.30 |
[SAP] 조건문 IF, ELSE / 조건 연산자 IS INITIAL, BETWEEN, CA (0) | 2025.01.30 |