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-CARRID는 S_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 |