ABAP SQL ① 요즘 SELECT 문법: FIELDS, INTO, 호스트 변수
3줄 요약
요즘
SELECT는SELECT FROM 소스 FIELDS 칼럼 WHERE 조건 INTO 대상.순서이고,INTO는 맨 뒤에, 프로그램 변수에는@를 붙여요.대상은
INTO TABLE @DATA(itab)처럼 인라인으로 만들 수 있지만, 만들어지는 내부 테이블은 키가 비어 있는 표준 테이블이에요.칼럼 이름이 같은 필드끼리만 옮기고 싶으면
INTO CORRESPONDING FIELDS OF를 써요. 안 쓰면 칼럼 이름이 아니라 위치로 채워져요.
어떤 상황에서 쓰나요
기존 SELECT 문에는 없던 @나 FIELDS가 새 코드에 등장해 낯설 수 있어요. 이번 글에서는 SELECT 문의 기본 순서를 읽고, 필요한 열과 행을 고른 뒤 결과를 구조체나 내부 테이블에 담는 방법을 알아봐요.
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
아직 댓글이 없어요.
로그인하고 댓글 쓰기