반응형

SAP · ABAP · OpenSQL
SAP OpenSQL 기초: ABAP 개발자를 위한 자주 쓰는 쿼리 정리
표준 테이블 조회부터 JOIN, UPDATE까지. ABAP 개발 실무에서 가장 많이 사용하는 OpenSQL 패턴을 보기 좋게 한 번에 정리했습니다.
1. SAP OpenSQL 이란?
SAP OpenSQL은 DB 종류(Oracle, HANA, MSSQL 등)에 상관없이 동일한 방식으로 데이터를 다룰 수 있게 해 주는 SAP 전용 SQL 문법입니다.
ABAP 개발자는 거의 모든 조회/저장 로직을 OpenSQL로 작성하게 되며, SELECT, INSERT, UPDATE, DELETE 네 가지가 기본 축입니다.
✅ 포인트
- OpenSQL을 잘 쓰면 DB 이식성, 성능, 가독성까지 한 번에 챙길 수 있습니다.
- 특히 HANA 환경에서는
- OpenSQL을 잘 쓰면 DB 이식성, 성능, 가독성까지 한 번에 챙길 수 있습니다.
- 특히 HANA 환경에서는
SELECT ... INTO TABLE @DATA() 패턴을 많이 사용합니다.2. 기본 SELECT 문법과 패턴
2-1. 단일 레코드 조회 (SELECT SINGLE)
DATA: ls_mara TYPE mara.
SELECT SINGLE *
FROM mara
INTO ls_mara
WHERE matnr = @lv_matnr.
- SELECT SINGLE은 조건에 맞는 첫 번째 레코드 1건만 가져옵니다.
- 키 필드(예: MATNR, BUKRS 등)로 단건 조회할 때 자주 사용됩니다.
2-2. 다중 레코드 조회 (INTO TABLE)
DATA: lt_mara TYPE TABLE OF mara.
SELECT *
FROM mara
INTO TABLE lt_mara
WHERE mtart = 'FERT'
AND matnr BETWEEN @lv_matnr_low AND @lv_matnr_high.
- 결과를 내부테이블(lt_mara)에 한 번에 담는 가장 기본적인 패턴입니다.
2-3. 필요한 필드만 조회 (성능·가독성 향상)
DATA: lt_list TYPE TABLE OF ty_material. "필요 필드만 가진 TYPES
SELECT
matnr,
mtart,
matkl,
ersda
FROM mara
INTO TABLE @lt_list
WHERE mtart = 'FERT'.
- 언제나 * 대신 필요한 컬럼만 선택하는 것이 좋습니다.
3. WHERE 조건 자주 쓰는 예시
3-1. 범위 조건 (BETWEEN, IN, NOT IN)
* BETWEEN
SELECT *
FROM mara
INTO TABLE @lt_mara
WHERE matnr BETWEEN @lv_matnr_low AND @lv_matnr_high.
* IN / NOT IN (내부테이블 활용)
SELECT *
FROM mara
INTO TABLE @lt_mara
WHERE matnr IN @lt_matnr_range
AND matkl NOT IN @lt_matkl_ex.
3-2. 패턴 매칭 (LIKE)
* HD 또는 HP로 시작하는 자재만
SELECT *
FROM mara
INTO TABLE @lt_mara
WHERE matnr LIKE 'HD%'
OR matnr LIKE 'HP%'.
3-3. 날짜 조건 (오늘, 기간 등)
* 생성일이 특정 기간 안에 있는 자재
SELECT *
FROM mara
INTO TABLE @lt_mara
WHERE ersda BETWEEN @lv_date_from AND @lv_date_to.
💡 TIP: 조건은 항상 인덱스 필드를 우선
WHERE 조건에 인덱스 필드(키 필드)를 먼저 사용하는 것이 성능상 유리합니다.
WHERE 조건에 인덱스 필드(키 필드)를 먼저 사용하는 것이 성능상 유리합니다.
4. 정렬·그룹핑 (ORDER BY / GROUP BY)
4-1. ORDER BY 예시
SELECT
matnr,
ersda,
mtart
FROM mara
INTO TABLE @lt_mara
WHERE mtart = 'FERT'
ORDER BY ersda DESC
matnr ASC.
4-2. GROUP BY · 집계 함수
SELECT
matkl,
COUNT( * ) AS cnt_material,
MAX( ersda ) AS last_created
FROM mara
INTO TABLE @lt_agg
GROUP BY matkl.
📌 집계 함수
- COUNT( * ), SUM( ), MAX( ), MIN( ), AVG( ) 등을 GROUP BY와 함께 자주 사용합니다.
- COUNT( * ), SUM( ), MAX( ), MIN( ), AVG( ) 등을 GROUP BY와 함께 자주 사용합니다.
5. JOIN 형태별 예시 (내부조인, 외부조인)
5-1. INNER JOIN – 가장 기본
SELECT
a~matnr,
a~matkl,
b~maktx
FROM mara AS a
INNER JOIN makt AS b
ON b~matnr = a~matnr
AND b~spras = 'E'
INTO TABLE @lt_material.
- 공통 키(matnr) 기준으로 두 테이블을 가지런히 묶는 가장 기본적인 JOIN입니다.
5-2. LEFT OUTER JOIN – 기준 테이블 유지
SELECT
a~matnr,
a~matkl,
b~maktx
FROM mara AS a
LEFT OUTER JOIN makt AS b
ON b~matnr = a~matnr
AND b~spras = 'E'
INTO TABLE @lt_material.
- makt에 텍스트가 없어도 mara의 자재는 그대로 가져옵니다.
6. UPDATE / INSERT / DELETE 기본 형식
6-1. UPDATE 예시
UPDATE ztable
SET field1 = @lv_field1
WHERE key1 = @lv_key1
AND key2 = @lv_key2.
IF sy-subrc = 0.
COMMIT WORK. "필요 시 명시적 커밋
ENDIF.
6-2. INSERT 예시
INSERT ztable FROM @ls_data.
IF sy-subrc <> 0.
"에러 처리
ENDIF.
6-3. DELETE 예시
DELETE FROM ztable
WHERE key1 = @lv_key1
AND key2 = @lv_key2.
⚠️ 주의
- 대량 UPDATE/DELETE 시에는 WHERE 조건을 반드시 확인하고, 먼저 테스트 시스템에서 실행해보는 것이 안전합니다.
- 가능하면
- 대량 UPDATE/DELETE 시에는 WHERE 조건을 반드시 확인하고, 먼저 테스트 시스템에서 실행해보는 것이 안전합니다.
- 가능하면
SELECT ... FOR UPDATE나 BAPI/표준 FM 활용도 검토합니다.7. 실무에서 자주 쓰는 OpenSQL 쿼리 모음 (Table 정리)
아래는 ABAP 개발 시 자주 사용하는 OpenSQL 패턴을 보기 좋게 표로 정리한 것입니다.
| 구분 | 설명 | 예시 코드 (핵심 부분) |
|---|---|---|
| 단건 조회 | 키 기준 단일 레코드 조회 |
|
| 다건 조회 | 내부테이블에 데이터 적재 |
|
| 범위 조건 | IN / BETWEEN 활용 |
|
| 패턴 검색 | HD/HP로 시작하는 자재 |
|
| 정렬 | 생성일 역순 + 자재번호 |
|
| 집계 | 자재그룹별 개수/최신일자 |
|
| JOIN (텍스트) | MARA + MAKT 텍스트 조인 |
|
| LEFT JOIN | 텍스트 없는 자재도 모두 조회 |
|
| UPDATE | Z테이블 특정 필드 변경 |
|
| INSERT | 새 레코드 추가 |
|
| DELETE | 조건에 맞는 레코드 삭제 |
|
💡 실무 팁
- 개발 중 자주 사용하는 패턴은 따로 메모(또는 개인 Z-레포지토리)해 두면, 새로운 프로그램을 만들 때 재사용성이 크게 올라갑니다.
- 특히 마스터(MARA/MAKT/MARC) + TEXT + T-code 조합은 자주 쓰이는 패턴이므로, 나만의 템플릿을 만들어두면 편합니다.
- 개발 중 자주 사용하는 패턴은 따로 메모(또는 개인 Z-레포지토리)해 두면, 새로운 프로그램을 만들 때 재사용성이 크게 올라갑니다.
- 특히 마스터(MARA/MAKT/MARC) + TEXT + T-code 조합은 자주 쓰이는 패턴이므로, 나만의 템플릿을 만들어두면 편합니다.
#SAP #ABAP #OpenSQL #SAP개발 #쿼리모음
반응형
'IT 이야기' 카테고리의 다른 글
| 구매자재 실무자를 위한 꼭 알아야 할 SAP MM 핵심 기능 (1) | 2025.11.23 |
|---|---|
| [SAP] 특별 조달 유형 / Special Procurement type (1) | 2025.07.28 |
| [SAP] System Field (SY-) 정리 (1) | 2025.07.23 |
| [SAP] TCODE, TABLE 검색 (CBO) (0) | 2025.07.10 |
| [SAP] 구성형자재(Configurable) 정리 (2) | 2025.07.09 |