ABAP DICTIONARY => DataBase

- 테이블은 실제 Db의 물리적인 테이블과 abap dictionary의 테이블이 존재한다.

- 테이블을 생성하여 활성화하면, DB에서 물리적인 테이블이 생성된다.

- ABAP Dictionary에서 생성한 테이블은 SAP DB UTILITY에서 번역하여 Db테이블로 생성된다.

- 실제 데이터베이스에 존재하는 테이블과 abap dictionary테이블의 개념은 다르다. (예. abap dictionary테이블의 필드 순서와 Db테이블의 필드 순서는 서로 다를 수 있음!)

 

 

테이블이란? 

table이란 데이터를 저장하고 관리하는 SAP 데이터베이스의 단위

- 자체 데이터베이스를 사용하기 때문에, ABAP프로그램에서는 데이터베이스 테이블을 중심으로 읽고, 삽입하고 수정하고 삭제하는 작업을 하게 됨

구분 설명
데이터베이스 테이블 실제 DB에 저장되는 테이블 (SE11에서 정의)
구조(Structure) 일종의 테이블처럼 생겼지만 데이터 저장 X (작업용 변수 그룹)
내부 테이블(Internal Table) ABAP 프로그램 안에서만 사용되는 가상의 테이블 (메모리에 존재)

 

 데이터베이스 테이블이란?

 

SAP 시스템의 **Data Dictionary(SE11)**에서 정의되고, SAP의 데이터베이스에 실제로 저장되는 테이블.

 

ABAP의 테이블 3가지

 

1. Transparent Table (투명 테이블)

 

👉 가장 기본적인 SAP 데이터베이스 테이블

  • SAP와 실제 DB에 1:1로 매핑되는 테이블
  • SE11에서 정의하면 실제 DB에도 똑같이 생성됨
  • 일반적으로 SELECT, INSERT 등을 통해 다루는 테이블

예시: SCARR, SFLIGHT, SPFLI 등 SAP 표준 테이블

 

특징

  • SE11에서 직접 정의 가능
  • ABAP 프로그램에서 주로 사용
  • 실제 DB에 존재

 

 

2.  Pooled Table (풀 테이블)

👉 여러 논리 테이블이 하나의 실제 테이블에 모여 저장되는 형태

  • 여러 개의 테이블 데이터를 하나의 물리 테이블(Pool)에 묶어서 저장
  • 예전 SAP 시스템에서 메모리 절약 목적으로 사용
  • 요즘은 많이 사용되지 않음

예시: AINDX, EDIDC (일부 오래된 테이블)

특징:

  • 여러 테이블이 하나의 DB 테이블에 저장됨
  • 성능이 떨어짐

 

 

3. Cluster Table (클러스터 테이블)

 

👉 논리적으로 연관된 여러 테이블을 묶어 하나의 저장 블록으로 처리

  • 일반적으로 SAP 시스템 내부 처리용으로 사용
  • 특히 HR(인사) 모듈이나 IDoc 관련 처리에서 많이 사용됨

예시: PCL1, PCL2 (인사 클러스터 테이블)

특징:

  • 하나의 DB 테이블에 여러 레코드가 압축되어 저장됨 (읽고 쓰는 데 복잡함)
  • ABAP에서는 일반 테이블처럼 사용할 수 있지만, DB 입장에서는 압축 저장

 

구분 설명 사용목적 실제DB 성능
Transparent 일반 테이블 대부분의 데이터 저장 O 좋음
Pooled 여러 논리 테이블을 하나의 DB 테이블에 과거 메모리 절약 O 낮음
Clustered 논리적으로 연관된 테이블 묶음 내부 처리용 (HR 등) O 낮음 (압축 저장)

 

테이블 필드의 속성 4가지


 1.  필드 이름(Field Name)

  • 해당 필드(열)의 이름입니다.
  • 개발자가 구분하고 접근할 때 사용하는 고유 식별자입니다.
  • 예: CARRID, CONNID, FLDATE

 

 2. 데이터 요소(Data Element)

  • 필드에 어떤 유형의 데이터가 저장되는지 정의합니다.
  • 데이터 타입, 길이, 텍스트 등을 포함하고 있어요.
  • 데이터 요소는 **도메인(domain)**을 참조할 수도 있어요.
  • 예: SCARR-CARRIDS_CARR_ID라는 데이터 요소를 가질 수 있음

 

3. 도메인(Domain)

  • 데이터 요소가 사용하는 기본 데이터 유형과 길이, 허용 값 범위를 정의합니다.
  • 즉, **데이터의 기술적 특성(타입, 길이, 유효값 등)**을 지정합니다.
  • 예: CHAR(3), NUMC(5), 값 범위 1~9999

 

4. 키 필드 여부 / 키 속성 (Key Field or Not)

 

  • 해당 필드가 **기본 키(Primary Key)**에 포함되는지 여부입니다.
  • 기본 키는 레코드를 고유하게 식별할 수 있어야 하며,
  • SELECT, UPDATE, DELETE 시 매우 중요한 역할을 해요.

 

 

 

 ABAP 테이블 필드 정의 시 입력하는 7가지 주요 속성

속성 항목설명
1. Field Name 필드(열)의 이름 (예: CARRID, PRICE)
2. Key Flag 🔑 기본 키 여부 (체크하면 Primary Key에 포함됨)
3. Initial Values 초기값 허용 여부 (면 NULL 허용, 비워두면 필수 입력)
4. Field Type (Data Type) 데이터 형식 (CHAR, NUMC, DATS, DEC, INT 등)
5. Field Length 데이터 길이 (몇 자까지 저장 가능한지)
6. Decimal Places 숫자형(DEC, CURR 등)일 경우 소수점 자리 수
7. Short Text 필드에 대한 설명 (라벨, UI에 표시될 텍스트 등)

 

 

예시 (SE11에서 테이블 생성 시 볼 수 있는 필드 속성)

Field Name KEY Initial Data type length Decimals Short Text
CARRID ☑️   CHAR 3 0 항공사 ID
CONNID ☑️   NUMC 4 0 연결 ID
PRICE ⬜️ ☑️ CURR 10 2 항공권 가격

 

  • Key Flag: Primary Key로 설정하면, 중복 불가 + 레코드 식별자로 사용
  • Initial: 비어 있을 수 있는지 여부 (체크 안 하면 반드시 값 있어야 함)
  • Decimal Places: 숫자 타입(CURR, DEC 등)일 때만 의미 있음
  • Short Text: UI에 필드명을 예쁘게 보여주기 위한 설명용 라벨

 

Delivery class

- A : 일반적으로 사용되는 타입 Master or Treansaction Data

- C : 사용자가 유지 관리

- L : 임시

- G : 기존 데이터는 수정이 안되고, 추가만 가능

- E : SAP와 고객이 각자 KY영역을 가지는 테이블

- S : 시스템 테이블, 상태정보=

- W : 시스템 테이블, 전송 시 자신의 전송 객첼를 가지고 전송

 

🔑 Key Field (키 필드)

 

  • 테이블에서 행을 고유하게 식별하는 필드.
  • 기본적으로 Primary Key를 구성하는 필드이며, 정렬 순서에도 영향을 줌

 

특징

 

  • 중복을 허용하지 않음 (Primary Key의 전체 조합이 중복되면 에러)
  • SELECT, READ, MODIFY, DELETE 등에서 조회 성능 향상에 도움을 줌
  • 키 필드는 기본적으로 NOT NULL (널값 허용 X)
  • → 그래서 Initial value 허용 여부가 중요⭐️
TYPES: BEGIN OF ty_car,
         carrid   TYPE scarr-carrid,   " 키 필드
         carrname TYPE scarr-carrname,
       END OF ty_car.

- carrid가 key field로 지정되면, ZCARR 테이블에서 carrid가 같은 값의 레코드를 중복 저장할 수 없음

 

 

2. Initial Value (초기값 허용 여부)

 

📌 정의

  • **키 필드에 빈 값(초기값)**을 허용할지를 정하는 속성.
  • ABAP에서는 각 데이터 타입마다 “초기값”이 있음.

 

기본 초기값 예시

타입초기값

타입 초기값
C 공백 ''
N 000...
I 0
D 00000000
T 000000

 

  • Key field인데도 초기값 허용하면, 여러 건의 데이터가 "공백"으로 입력되어 중복 문제가 생길 수 있음
  • 그래서 일반적으로는 Key field는 초기값 허용 ❌ 로 두는 게 안전함

속성설명

속성 설명
Key field 테이블의 고유한 레코드를 식별하는 데 사용됨
Initial value 키 필드에 초기값 (공백, 0 등)을 허용할지 여부

 

🔑 외래 키(Foreign Key)란?

- 한 테이블의 필드가 , 다른 테이블의 기본 키(primary key)와 연결되는 것을 의미함.

- A 테이블의 필드가 B테이블의 기본 키를 참조할 때, A테이블의 필드는 외래키가 됨

- ABAP에서는 참조 무결성 & 일관성을 유지하게 됨 (즉, 존재하지 않는 값이 들어가는 걸 막을 수 있음)

- ABAP영역에서 사용하는 Foreign key는 ABAP Dictionary에만 정의되어 있으며, 실제 DB에는 존재하지 않음

* 기준 테이블
TABLE: SCARR (항공사 코드 테이블)
- CARRID    (PK)
- CARRNAME

* 참조 테이블
TABLE: SFLIGHT (항공편 테이블)
- CARRID    (FK)  → SCARR-CARRID
- CONNID
- FLDATE

 

⚙️ ABAP에서 Foreign Key의 역할

 

기능 설명
데이터 무결성 유지 SFLIGHT에 없는 CARRID를 넣으려고 하면 오류가 납니다.
검색 도움 기능 제공 (F4 Help) 외래 키가 걸린 필드는 자동으로 F4 입력 도움 창이 생깁니다.
Table Maintenance Generator와 연동 외래 키를 기반으로 테이블 유지관리 화면에서 자동 검증이 수행됩니다.

 

1) Check field와 Value Check

- foreign key가 Check field 와 연결되어 있는 것은 Foreign Key필드에 입력되는 값은 check테이블에 값이 있는 지 확인 과정을 거치는 것을 의미한다. => 값이 없으면 에러!

- Foreign key를 정의할 때 내부적으로 Select문이 자동으로 생성된다 

SELECT * FROM zcertinfo where zempcert-certid = zcertinfo-certid.

 

 

2) Generic과 Constant Foreign Key

- check 테이블의 모든 Key 필드를 Foreign key로 check할 필요는 없다.

- generic foreign key or Constant Foreign key로 정의함

'SAP' 카테고리의 다른 글

easy abap 36. strucutre  (0) 2025.05.14
easy abap 35. Table Enhancement  (0) 2025.05.14
easy abap 33. Abap Dictionary  (0) 2025.05.14
easy abap 32. internal table 문제 풀기  (0) 2025.05.14
easy abap 31. read 구문/ 인터널 테이블 읽기  (0) 2025.05.14

+ Recent posts