ABAP SQL ① 요즘 SELECT 문법: FIELDS, INTO, 호스트 변수
3줄 요약
요즘
SELECT는SELECT FROM 소스 FIELDS 칼럼 WHERE 조건 INTO 대상.순서이고,INTO는 맨 뒤에, 프로그램 변수에는@를 붙여요.대상은
INTO TABLE @DATA(itab)처럼 인라인으로 만들 수 있지만, 만들어지는 내부 테이블은 키가 비어 있는 표준 테이블이에요.칼럼 이름이 같은 필드끼리만 옮기고 싶으면
INTO CORRESPONDING FIELDS OF를 써요. 안 쓰면 칼럼 이름이 아니라 위치로 채워져요.
어떤 상황에서 쓰나요
오래된 ABAP 프로그램의 SELECT ... INTO TABLE itab 에는 @ 가 없고, 새로 쓰는 코드에는 @DATA(...) 가 있어서 둘이 같은지 헷갈릴 수 있어요. 이 연재는 SAP 공식 ABAP 치트시트의 *ABAP SQL* 편을 정리해요. 첫 회는 SELECT 한 문장의 뼈대와 읽은 결과를 받는 방법이에요.
핵심 내용
뼈대. 치트시트가 보여 주는 기본 형태는 이래요. WHERE 는 선택이지만 결과를 줄이려면 쓰라고 권해요.
SELECT FROM source " 어디서 읽나
FIELDS field_list " 어떤 칼럼을 읽나
WHERE condition " 어떤 행을 읽나
INTO target. " 어디에 담나현대 문법의 특징 (치트시트의 "Notes on Modern SELECT Statements")
INTO절은 다른 절 뒤에 둬요.호스트 변수나 식은
@나@( ... )를 붙여요. 프로그램 변수와 DB 칼럼이 구분돼요. 엄격한 문법 검사 모드에서는 이 형태가 강제돼요.SELECT목록은FIELDS로 쓰거나,SELECT col1, col2 FROM ...처럼FROM앞에 쓸 수 있어요. 둘은 같은 문장을 다르게 배치한 것뿐이에요.한 행만 읽으면
SELECT SINGLE, 아니면 여러 행 결과나SELECT루프예요.
`SELECT` 목록 쓰는 법
전부:
SELECT *여러 칼럼:
col1, col2, col3소스 이름을 붙여서:
dbtab~col1,dbtab~*별칭:
col1 AS al1, 소스에도FROM dbtab AS ds(별칭은 한 번만 쓸 수 있고, 문장 안에서는 주로ORDER BY뒤에서 써요)이름 충돌이 있으면 칼럼 선택자
~를 쓰라는 안내도 나와요.
대상(target)
INTO TABLE @itab/INTO TABLE @DATA(itab_inl): 내부 테이블. 인라인으로 만들면 표준 테이블이고 키가 비어 있다는 점을 치트시트가 짚어요. 이후에 정렬이나 읽기를 할 때 기본 키가 비어 있다는 걸 기억해야 해요.INTO @struc/INTO @DATA(struc_inl): 구조체(SELECT SINGLE에서).INTO CORRESPONDING FIELDS OF [TABLE]: 이름이 같은 칼럼만 옮겨요. 이 추가 구문 없이 이미 있는 대상에 읽으면SELECT목록의 칼럼이 왼쪽부터 순서대로 대상의 컴포넌트에 들어가고, 남는 컴포넌트는 변하지 않아서 원치 않는 결과가 나올 수 있어요. 기본 규칙은 이래요. 추가 구문이 없으면 칼럼 이름은 상관없고 위치만, 있으면 위치는 상관없고 이름만 봐요.APPENDING [CORRESPONDING FIELDS OF] TABLE:INTO는 대상을 초기화하지만APPENDING은 기존 줄을 남기고 덧붙여요.INTO NEW @DATA(dref): 익명 데이터 객체(참조)로 받아요.
`FOR ALL ENTRIES` 대신. 치트시트는 이 추가 구문이 폐기 예정(deprecated)으로 간주된다고 말해요. 함정이 여럿 있어서예요. 표현식, GROUP BY, ORDER BY 같은 SQL 기능이 없고(정렬은 기본 키 칼럼만 가능), 결과에 암묵적인 DISTINCT 가 적용돼 중복 행이 자동으로 사라지며 데이터 문제를 가릴 수 있어요. 무엇보다 내부 테이블이 비어 있으면 `WHERE` 조건 전체가 무시되고 DB 테이블의 모든 행이 돌아와요. 그래서 오래된 코드에는 IF lines( cond_tab ) > 0. 같은 방어 코드가 붙어 있어요. 대신 내부 테이블을 소스로 쓰는 조인을 권해요.
SELECT DISTINCT schedule~carrid, schedule~connid
FROM zdemo_abap_flsch AS schedule
INNER JOIN @cond_tab AS condition
ON schedule~carrid = condition~carrid
AND schedule~connid = condition~connid
INTO TABLE @DATA(itab_join).주의할 점
내부 테이블을 소스로 쓰는 조인(
INNER JOIN @cond_tab)은 비교적 최근 문법이에요. 어느 릴리스부터인지는 치트시트에 적혀 있지 않아서, 내 시스템에서 문법 검사를 해 보세요.이 글의
@호스트 변수, 인라인 선언은 낮은 릴리스(예: ECC 6.0)에서는 쓸 수 없어요. 어느 릴리스부터인지 확인하세요.치트시트는 계속 갱신되는 문서예요. 첫 공개는 2022년이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.
출처와 이용 안내
원문: ABAP Cheat Sheets - ABAP SQL Read Operations Using SELECT · 작성자 SAP SE and contributors SAP-samples · 작성일 2022-12-05 · 기준 릴리스에 따라 다름 원문은 최신 ABAP 기준 · 확인일 2026-10-25
이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.
원문은 Apache-2.0 라이선스(https://www.apache.org/licenses/LICENSE-2.0)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.
설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.
SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.
댓글 0
아직 댓글이 없어요.
로그인하고 댓글 쓰기