🔥 ABAP DELETE 문이란?

  • 데이터베이스 테이블의 레코드를 삭제하는 명령어
  • 신중히 써야 해! 잘못 쓰면 테이블 전체 레코드가 삭제될 수도 있음!

✅ 기본 문법

1. 🔸 특정 레코드 삭제 (기본 키 기준)

 
```
CLEAR wa_employees. wa_employees-employee = '10000007'. " 기본 키만 세팅 DELETE zemployees FROM wa_employees.
```
  • wa_employees 구조체의 **기본 키 값(employee)**에 해당하는 레코드만 삭제.
  • sy-subrc = 0 → 삭제 성공
  • sy-subrc ≠ 0 → 실패 (예: 해당 키의 레코드 없음)

2. 🔸 조건 삭제 (WHERE 사용)

abap
CopyEdit
DELETE FROM zemployees WHERE surname = 'BROWN'.
  • surname이 'BROWN'인 모든 레코드 삭제
  • 여러 개 삭제 가능!

3. 🔥 전부 삭제 (❗주의❗)

abap
CopyEdit
DELETE FROM zemployees.
  • 테이블의 모든 레코드 삭제 😱
  • 실수로 쓰면 큰 문제가 생길 수 있으니 정말 조심해야함

💡 DELETE 문 흐름 예시

  1. 기본 키로 삭제
    • employee = '10000007' 인 레코드 1개 삭제
  2. 조건으로 삭제
    • surname = 'BROWN' 인 레코드 여러 개 삭제
  3. 테이블 전체 삭제
    • 실습에서는 하지 않았지만, 문법은 존재

📌 리턴 코드 sy-subrc


의미
0 삭제 성공
4 해당 조건의 레코드 없음

🚨 주의사항

  • 항상 sy-subrc를 체크해서 정상 동작했는지 확인해야함
  • DELETE FROM 전체 삭제는 절대 주의!!
  • CLEAR 구문으로 워크에어리어 초기화하는 습관도 중요

🧠 결론 요약

  • 기본 키 삭제 → DELETE FROM tab FROM wa
  • 조건 삭제 → DELETE FROM tab WHERE field = 'value'
  • 전체 삭제 → DELETE FROM tab. → 사용 주의!
  • ✔ 항상 sy-subrc 체크하기
  • ✔ CLEAR 문으로 워크에어리어 초기화 습관 들이기

 

DELETE FROM ... FROM wa 특정 키 값 레코드 삭제
DELETE FROM ... WHERE 조건에 해당하는 레코드 삭제
DELETE FROM ... 테이블 전체 삭제

 

 

 

✅ 1. 첫 번째 DELETE FROM zemployees FROM wa_empl.

abap
CopyEdit
wa_empl-employee = '1000012'. DELETE zemployees FROM wa_empl.

이 경우는 employee = '1000012' 인 레코드가 실제로 존재해서 삭제 성공했기 때문에
→ sy-subrc = 0이 되는 거야.
즉, 삭제 성공 = sy-subrc가 0


❌ 2. 두 번째 DELETE FROM zemployees WHERE surname = 'BROWN'.

abap
CopyEdit
DELETE FROM zemployees WHERE surname = 'BROWN'.

여기서는 surname = 'BROWN'인 레코드가 존재하지 않았기 때문에,
삭제할 게 없어서 아무 일도 안 일어났고,
→ 그 결과 **sy-subrc = 4**가 된 거야.


🔢 SY-SUBRC 값 정리:

SY-SUBRC 값의미
0 작업 성공 (레코드 삭제됨)
4 작업 실패 (삭제할 레코드 없음 등)

 

🔢 table entries delete

 

결과:

- No table entries found for specified key

: 모든 데이터가 사라졌다!

🧾 🔧 MODIFY 문이란?

  • MODIFY는 존재하는 레코드면 UPDATE, 없으면 INSERT 하는 명령어.
  • 즉, "있으면 수정하고, 없으면 새로 넣어라" 이런 뜻!

✅ 사용 형식

`MODIFY zemployees FROM wa_employees.`
  • wa_employees는 워크 에어리어 (작업용 구조체)
  • 내부적으로는 employee(Key)를 보고,
    • 있으면 그 레코드를 수정 (UPDATE)
    • 없으면 새로 추가 (INSERT)

✅ 리턴값 체크

  • sy-subrc = 0 → 성공
  • sy-subrc = 4 → 실패 (예: 테이블 오류)

👀 예제 흐름 요약

  1. INSERT: 10000006번 직원 등록 (WESTMORE / BRUCE)
  2. UPDATE: 10000006의 성을 EASTMORE, 이름을 ANDY로 변경
  3. MODIFY (기존 레코드):
    • 같은 10000006 키 → NORTHMORE / PETER로 업데이트
  4. MODIFY (새로운 레코드):
    • 10000007 신규 → 새로운 직원 삽입

📌 핵심 요점

구문기능조건
INSERT 새 레코드 삽입 해당 키가 없을 때만 가능
UPDATE 기존 레코드 수정 해당 키가 있어야 함
MODIFY 있으면 수정, 없으면 삽입 (자동 판단) 키 존재 여부로 판단

💡 왜 MODIFY는 조심해서 써야 할까?

  • INSERT / UPDATE를 명확하게 나누는 게 가독성 좋음
  • 하지만 실무에서 상황 따라 둘 중 하나를 선택해야 할 때는 MODIFY가 유용함

🔚 결론

  • 평소엔 INSERT, UPDATE를 구분해서 쓰고
  • 조건에 따라 둘 중 하나를 선택해야 할 때만 MODIFY를 사용하자!

 


✅ 코드 구조

1. 작업에 필요한 워크 에어리어(work area)는 이미 선언됨


DATA wa_employees LIKE zemployees.

2. 첫 번째 INSERT

 
 
wa_employees-employee = '10000006'. 
wa_employees-surname = 'WESTMORE'. 
wa_employees-forename = 'BRUCE'. 
wa_employees-title = 'MR'. 
wa_employees-dob = '19921213'. 


INSERT zemployees FROM wa_employees. 


IF sy-subrc = 0. 
	WRITE 'Record Inserted Correctly'. 
ELSE. 
	WRITE: 'We have a return code of ', sy-subrc. 
ENDIF.
  • 새 직원 'WESTMORE / BRUCE'를 등록함.
  • sy-subrc = 0이면 성공한 거고, 4면 실패 (예: 중복 key)

3. UPDATE 할 값으로 다시 세팅

wa_employees-surname = 'EASTMORE'. wa_employees-forename = 'ANDY'.
 
 
  • 이름만 바꿔줌.
  • employee number는 그대로!
    ➜ 이게 key 역할을 하기 때문에, 이 key로 해당 레코드를 찾아서 나머지를 바꾸는 것!

4. UPDATE 실행

UPDATE zemployees FROM wa_employees. 
IF sy-subrc = 0. 
	WRITE 'Record Updated Correctly'. 
ELSE. 
	WRITE: 'Update Failed. Return code: ', sy-subrc. 
ENDIF.
 
이 구문은 employee가 10000006인 레코드를 찾아서, surname, forename 등을 UPDATE함.

🔍 추가 팁

✨ CLEAR 안 해도 괜찮은 이유

  • 이 예제에서는 모든 필드를 다시 덮어쓰니까, 이전 값이 남아 있을 걱정이 없음
  • 하지만 일부 필드만 바꾼다면, 꼭 CLEAR 해줘야 함!

🧠 UPDATE의 핵심 조건

  • Key 필드 (employee) 가 같아야 하고,
  • 나머지 필드를 바꾸고 싶을 때 사용함.

💡 정리


구문 역할
INSERT 새 레코드 추가
UPDATE 기존 레코드 수정 (Key 기준 찾음)
sy-subrc = 0 성공 여부 확인

💡 전체 개요

  • 프로그램이 단일한 INSERT로 끝나는 게 아니라,
  • 반복(loop)을 통해 여러 개의 데이터를 삽입하거나 수정할 때,
  • 같은 Work Area를 재사용하는 경우가 많음
  • 이때 기존 데이터가 남아있으면 오류가 발생할 수 있으므로, CLEAR를 써서 초기화해줘야함!

🔄 프로그램 흐름

  1. wa_employees에 데이터 채움
  2. INSERT로 DB 테이블에 삽입
  3. SY-SUBRC 체크해서 성공 여부 확인
  4. 그 다음 작업 전 CLEAR wa_employees 실행! → 이전 값들을 날리고 깨끗한 상태로 만들어줌
  5. 다시 새로운 데이터를 넣고 INSERT 시도

🧪 실행 중 에러 발생 예시

  • 같은 키 값(employee = '10000006')으로 두 번 INSERT 시도하면? → SY-SUBRC = 4가 뜸 (에러) → "Record already exists" 느낌의 실패 코드

💡 CLEAR 사용 방식

문장 설명
CLEAR wa_employees. 구조체 전체를 초기화
CLEAR wa_employees-employee. 특정 필드만 초기화

💡 전체 구조체를 초기화하는 걸 추천!


📌 디버그 화면에서 확인한 내용

  • SY-SUBRC = 4일 때, 오류 메시지 출력
  • 이후 CLEAR로 일부 필드를 초기화하고 새로운 값 삽입하면 SY-SUBRC = 0으로 성공
  • 보고서에는 "We have a return code of 4" 또는 "Record Inserted Correctly" 출력

🧼 왜 CLEAR가 중요할까?

  • ABAP은 변수를 재사용할 때 기존 값이 자동으로 초기화되지 않음
  • 예기치 않은 값이 남아있을 수 있음
  • 특히 loop나 반복 insert/update 작업에서는 필수!

✅ 핵심 요약

  • CLEAR는 변수나 구조체의 값 초기화용
  • Work Area를 여러 번 쓰는 경우 반드시 필요함
  • SY-SUBRC 값으로 성공/실패 판단 후 대응 로직 작성!
  • 실습에서는 employee 필드만 초기화했지만, 보통은 CLEAR wa_employees. 처럼 전체 구조체를 비우는 게 안전함

 

✅ CLEAR 문이 필요한 이유 (왜 쓰는가?)

CLEAR는 변수나 구조체(work area)의 값을 초기화
즉, 기존에 있던 값들을 다 지워주는 것!


❓ 그럼 왜 굳이 초기화해야 할까?

📌 1. 이전 값이 남아 있어서 잘못된 데이터가 들어갈 수 있기 때문!

예를 들어서...

 
wa_emp-employee = '1001'. wa_emp-surname = 'KIM'. wa_emp-forename = 'JISOO'. 
INSERT zemployees FROM wa_emp.

 

 

⬇️ 다음 레코드 만들 때...

CLEAR wa_emp-employee. " employee만 초기화 wa_emp-employee = '1002'. 
INSERT zemployees FROM wa_emp.
 
이러면 surname과 forename은 그대로 KIM, JISOO가 남아있음.

➡️ employee = 1002지만 이름은 여전히 JISOO가 들어감 ❗

즉, 예전 값이 덮어써지지 않으면 그 값 그대로 들어가버림 


📌 2. 반복문에서 구조체 재사용할 때 자주 씀

예를 들어 LOOP 돌면서 레코드 계속 INSERT 한다고 하면:

LOOP AT it_data INTO wa_data. CLEAR wa_emp. " 구조체 전체 초기화 => wa_emp-employee = wa_data-id. wa_emp-surname = wa_data-name. 
INSERT zemployees FROM wa_emp. ENDLOOP.

CLEAR 안 하면 이전 루프에서 남은 값들이 계속 따라다님... 🥲


✨ 핵심 요약

상황CLEAR 안 써도 됨?추천?
모든 필드를 직접 덮어씀 O 괜찮음
일부 필드만 변경 X CLEAR 꼭 필요
반복문에서 구조체 재사용 X CLEAR 추천

 


*&---------------------------------------------------------------------*
*& Report  Z_OPENSQL_1                                                 *
*&---------------------------------------------------------------------*
*& Demonstrates INSERT with Open SQL and SY-SUBRC check
*&---------------------------------------------------------------------*

REPORT  z_opensql_1.

* Work area 선언
DATA wa_employees LIKE zemployees.

* 데이터 채우기
wa_employees-employee = '10000006'.
wa_employees-surname = 'WESTMORE'.
wa_employees-forename = 'BRUCE'.
wa_employees-title = 'MR'.
wa_employees-dob = '19921213'.

* INSERT 구문 실행
INSERT zemployees FROM wa_employees.

* 결과 확인
IF sy-subrc = 0.
  WRITE 'Record Inserted Correctly'.
ELSE.
  WRITE: 'We have a return code of ', sy-subrc.
ENDIF.

💡 보충 설명:

  • wa_employees는 테이블 구조와 동일한 레코드 단위 메모리 공간
  • INSERT 구문으로 테이블에 데이터를 넣고,
  • sy-subrc = 0이면 성공적으로 삽입된 것!
  • 실패 시에는 실패 코드(sy-subrc)를 출력

 

💡 Work Area란?

**Work Area(워크 에어리어)**는 ABAP에서 내가 작업할 데이터를 임시로 저장해두는 메모리 공간

  • 쉽게 말해, "하나의 레코드(한 줄)"를 담을 수 있는 변수라고 생각하면됨!
  • 보통 테이블 구조와 동일하게 만들어서, 테이블에 값을 넣거나, 테이블에서 값을 가져와서 사용하는 데 쓰임.

📦 예시로 이해하기

예를 들어 zemployees라는 테이블이 이렇게 생겼다고 해볼게요:


EMPLOYEE SURNAME FORENAME TITLE DOB
10000006 WESTMORE BRUCE MR 19921213

이 한 줄을 담을 수 있는 그릇이 바로 Work Area!

 
DATA wa_employees LIKE zemployees.

 

📝 결과

✅ 핵심 요약

✔ Open SQL 5가지 기본 문장

구문기능
SELECT 테이블에서 데이터를 조회
INSERT 테이블에 새 레코드 추가
UPDATE 테이블에 기존 레코드 수정
MODIFY 조건에 따라 추가 또는 수정
DELETE 테이블에서 레코드 삭제

📌 주요 내용 정리

🔹 1. SELEC

  • 테이블에서 데이터를 읽어와서 프로그램에서 사용/ 조회

🔹 2. INSERT

  • 테이블에 새로운 데이터를 추가
INSERT ztable FROM wa.

🔹 3. UPDATE

  • 이미 존재하는 레코드를 변경할 때 사용
UPDATE ztable SET field = 'value' WHERE id = '001'.

🔹 4. MODIFY

  • 존재하면 UPDATE, 존재하지 않으면 INSERT로 동작
  • 조건 판단 없이 편하게 쓸 수 있지만, 주의해서 사용해야함!

🔹 5. DELETE

  • 테이블에서 특정 레코드를 삭제할 수 있음
 
DELETE FROM ztable WHERE id = '001'.

🛡️ SY-SUBRC: 실행 결과 확인

  • ABAP에서는 명령어가 성공했는지 실패했는지 SY-SUBRC라는 시스템 변수로 확인함
SY-SUBRC 값 의미
0 명령이 정상 수행됨
≠ 0 실패하거나 특별한 상황 발생 (예: 조건 불일치)
 
INSERT ztable FROM wa. IF sy-subrc = 0. WRITE: '삽입 성공!'. ELSE. WRITE: '삽입 실패!'. ENDIF.

🧠 주의사항

  • SY-SUBRC는 모든 SQL 문에서 각각 다른 의미를 가질 수 있음
  • 예를 들어 SELECT에서는 "데이터가 없음"도 sy-subrc ≠ 0으로 처리됨!
  • 따라서 문장별 의미를 꼭 문서나 도움말에서 확인해두는 것이 중요함 

📝 마무리

이제 ABAP에서 데이터 조작 시 반드시 SY-SUBRC로 결과를 체크해야 하고,
어떤 상황에서 어떤 값을 가지는지 꼭 익숙해지면 실무에서 버그 방지에 큰 도움이 된다고 함 

🔹 "이제 ABAP 프로그램에서 사용할 수 있는 Open SQL 문들을 살펴보자."

 

Open SQL 문을 사용하면 DB 테이블의 레코드에 간접적으로 접근하거나 수정할 수 있음.

 


🔹 "Open SQL의 장점"

Open SQL의 큰 장점은,
우리가 어떤 종류의 데이터베이스(Oracle, Microsoft SQL 등) 를 쓰든 동일한 방식으로 ABAP 프로그램에서 사용 가능하다.

→ 즉, 데이터베이스 종류에 상관없이 코드가 호환됨!
이건 SAP가 내부적으로 그 차이를 알아서 처리해주기 때문!


🔹 "MANDT 필드"

  • MANDT는 클라이언트 번호(예: 100, 200, 800 등) 를 의미해요.
  • 그리고 이 MANDT 필드는 대부분의 거래 데이터(트랜잭션 테이블),
    마스터 데이터, 설정 테이블 등에 기본적으로 포함되어 있음

🔹 SQL에서의 MANDT 필드

ABAP에서는 굳이 MANDT를 SQL문에 명시하지 않아도 됨!

왜냐하면:

  • 내가 어떤 클라이언트(100번, 800번 등) 로 로그인하든,
  • SAP 시스템이 자동으로 MANDT 값을 기준으로 필터링함

즉, 내가 클라이언트 100번으로 로그인해서 프로그램을 돌리면,

SELECT * FROM ZEMPLOYEES.

SELECT * FROM ZEMPLOYEES WHERE MANDT = '100'.

아래 select문으로 자동필터링됨

 


🔹 "이 자동 필터링의 장점은?"

  • 보안성: 다른 클라이언트의 데이터를 실수로 접근할 일이 없어짐
  • 코드 간결함: MANDT를 따로 조건에 쓰지 않아도 됨!
  • 일관성: 여러 클라이언트에서 동일한 프로그램이 동일하게 작동!

✅ 요약


Open SQL DB 종류에 상관없이 ABAP에서 사용하는 SQL 문
MANDT 필드 클라이언트 번호, 대부분의 테이블에 자동 포함됨
자동 필터링 로그인한 클라이언트에 따라 MANDT는 자동으로 필터됨
프로그래머 역할 MANDT를 SQL문에 명시할 필요 없음
보안 효과 다른 클라이언트 데이터 접근 차단됨

✅ SAP에서의 Locking(잠금) 개념이란?

SAP 시스템은 동시에 여러 사용자가 동일한 데이터를 접근할 수 있기 때문에,
데이터 무결성과 일관성을 지키기 위해 잠금(Lock)이 필요함!


🔒 1. 데이터 잠금의 종류

구분설명
구분 설명
Database Lock (DB Lock) DB 자체의 잠금 기능 (단일 SQL 단계에서만 사용됨)
SAP Lock (Logical Lock, ENQUEUE/DEQUEUE) SAP 자체적인 잠금 개념. 여러 화면/단계 걸친 트랜잭션에 사용됨

 


🔷 2. 왜 DB Lock만으로는 부족할까?

SAP에서는 한 건의 입력이 여러 화면(SCREEN) 을 통해 이루어짐! 예를 들어:

  1. 첫 화면: 이름, 주소
  2. 두 번째 화면: 직급, 부서
  3. 세 번째 화면: 급여, 통화

그런데 사용자가 2화면까지만 입력하고 취소하면?
→ 일부 데이터만 DB에 저장되어 불완전한 상태가 될 수 있음 ❌

그래서 SAP는 단순한 DB Lock 대신,
트랜잭션 전체를 묶어서 잠그는 SAP Lock(논리적 잠금) 을 사용한다.


🧩 3. SAP Lock의 특징


특징 설명
✔ SAP 자체 Lock 테이블에 저장 ENQUEUE라는 함수로 설정됨
✔ 트랜잭션이 끝날 때까지 잠금 유지 모든 화면이 완료되기 전까지 DB에 저장하지 않음
✔ 여러 테이블 잠금 가능 전제: 외래키(Foreign Key)로 테이블이 연결되어 있어야 함
✔ ABAP Dictionary에서 Lock Object 생성 개발자가 생성하고 사용하는 구조체 개념

 


🛠️ 4. SAP Lock Object 구성

  1. ABAP Dictionary(SE11)에서 Lock Object 생성
  2. Lock Object는 자동으로 2개의 Function Module 을 생성:
    • ENQUEUE_객체명: 잠금 설정
    • DEQUEUE_객체명: 잠금 해제
  3. 개발자가 ABAP 코드에서 이 함수들을 직접 호출

예시:

CALL FUNCTION 'ENQUEUE_EZEMPLOYEES2' EXPORTING employee_id = '10001'. 

" ... 작업 수행 후 

CALL FUNCTION 'DEQUEUE_EZEMPLOYEES2' EXPORTING employee_id = '10001'.
 

💡 핵심 요약

항목설명
🔐 SAP Lock이 필요한 이유 여러 사용자의 동시 접근으로부터 데이터 보호
🧱 DB Lock 한계 단일 단계만 처리 가능, 다중 화면/다단계엔 부적합
🧰 SAP Lock Object ABAP Dictionary에서 생성, Function Module 자동 생성
📦 잠금 저장 위치 중앙 Lock 테이블 에 기록됨
👨‍💻 개발자 역할 ENQUEUE / DEQUEUE 함수 직접 호출해서 잠금 설정 및 해제

🔷 1. SAP의 3계층 아키텍처 구조

SAP 시스템은 보통 다음 3가지 계층으로 구성됨 client, app, database server.

계층 설명
Presentation (Client) 사용자가 SAP GUI 등으로 작업
Application Server ABAP 프로그램 실행, 로직 처리
Database Server 데이터 저장, 조회, 수정 담당

📌 즉, 사용자는 SAP GUI에서 프로그램을 실행하면, Application 서버가 그걸 받아서 DB와 통신하게 된다.


🔷 2. 여러 사용자가 동시에 접근하는 상황

  • 기업에서는 수백, 수천 명의 사용자가 동시에 같은 데이터를 조회/수정할 수 있음
  • 따라서 ABAP 프로그램을 만들 땐, "동시성" 을 고려해야함!
  • 예: A가 수정 중일 때 B가 읽으면, 최신 데이터가 아닐 수 있음 → 주의 필요

🔷 3. Open SQL이란?

구분 설명
일반 SQL 데이터베이스에 직접 명령
Open SQL ABAP 프로그래밍에서 SAP가 제공하는 DB 인터페이스 언어
  • SELECT, INSERT, UPDATE, DELETE 같은 SQL 문장을 ABAP에서 사용 가능
  • 하지만 실제로는 직접 DB에 접근하는 게 아닌, ABAP Dictionary를 통해 간접적으로 DB 접근

📌 즉, ABAP에서 직접 DB를 건드리지 않고, SAP가 제공한 안전한 경로로 접근하는 것 → 안정성과 보안 보장


🔷 4. Buffering (버퍼링)

개념설명
버퍼링 DB 접근을 줄이기 위해, 최근 데이터를 메모리에 잠깐 저장해두는 기술
장점 속도 향상
단점 실시간 데이터가 아닐 수 있음
  • 예: 마스터 데이터(MARA, 고객정보)는 자주 바뀌지 않아서 버퍼링 O
  • 예: 거래 데이터(주문, 재고 등)는 자주 바뀌므로 버퍼링 X

✅ 테이블을 버퍼링 사용 안 함으로 설정하면 그래서 항상 최신 데이터를 DB에서 직접 가져오게됨

버퍼링되어있다면, 데이터가 최신데이터가 아닐 수 있음!


🔷 5. 요약 정리

 

핵심 포인트설명
💡 Open SQL ABAP에서 DB에 안전하게 접근하는 수단 (ABAP Dictionary 통해 간접 접근)
💡 버퍼링 읽기 속도는 빠르지만 최신 데이터가 아닐 수 있음
💡 트랜잭션성 여러 사용자가 동시에 작업해도 안정적으로 작동해야 함
💡 실시간 데이터 필요시 버퍼링 끄고 항상 최신 DB에서 직접 가져오기

 

 

 

 

✅ Include Structure란?

Include Structure는 여러 테이블이나 프로그램에서 재사용 가능한 필드 묶음(구조체) 
Append Structure와 비슷하지만 재사용성과 관리성에서 차이가있음


🔍 Append Structure vs Include Structure

항목 Append Structure Include Structure
목적 테이블 확장 (보통 1회성) 재사용 가능한 구조 정의
적용 위치 테이블 끝에만 추가 가능 테이블 중간에 원하는 위치에 삽입 가능
재사용 가능성 ❌ (하나의 테이블에만 사용) ✅ 여러 테이블이나 프로그램에서 사용 가능
일반적으로 사용되는 경우 표준 테이블 확장 (SAP 보호 목적) 여러 테이블에 동일한 필드 세트가 필요할 때
SAP 표준과의 충돌 위험 없음 없음

📌 Include Structure의 특징

  • 반드시 flat 구조여야 함 (다른 구조체 포함 불가)
  • 각 필드의 길이는 16자 이하여야 함
  • 테이블 중간에 삽입 가능 (커서 위치 바로 위에 삽입됨)
  • 키 필드로 사용하고 싶다면 테이블 상단에 위치해야 함
  • 삽입 후 테이블에서 실제 컬럼처럼 보이고 사용됨

🧪 예시: Include Structure 만들기

  1. SE11에서 테이블을 수정 모드로 엶
  2. 삽입할 위치에 커서 올려둠
  3. Edit > Include > Insert 메뉴 클릭
  4. 구조체 이름 예: ZEMPL_INC
  5. 구조체 안에 ZZLOCATION, ZZDIVISION 같은 필드를 생성
  6. 저장 & 활성화

결과

EMP_IDNAMEZZLOCATIONZZDEPARTMENT
1001 Alice Seoul IT
1002 Bob Busan HR
  • ZZLOCATION → Include Structure에서 추가된 필드
  • ZZDEPARTMENT → Append Structure에서 추가된 필드

💡 팁

  • 표준 테이블에 동일한 필드를 여러 번 확장해야 할 때는 Include Structure를 만들어두고 재사용하는 것이 좋다
  • 실습에서는 우리가 만든 Z 테이블에 Include를 붙여봤지만, 표준 테이블(MARA, KNA1 등) 에도 동일하게 적용 가능
  • 변경 모드에서 필드가 안 보일 때는 Expand Include 버튼을 눌러야 보임!

+ Recent posts