-
SAP STRING 타입 필드 — CDS / AMDP 처리 가이드SAP 2026. 5. 13. 18:48
SAP STRING 타입 필드 — CDS / AMDP 처리 가이드 SAP STRING 타입 필드 — CDS / AMDP 처리 가이드
1. STRING 타입이란?
ABAP Dictionary에서
STRING은 가변 길이 문자열로, HANA DB에서는NCLOB(Large Object) 로 물리 저장됩니다.
CHAR,NUMC,NVARCHAR와 근본적으로 다르며, CDS·AMDP에서 직접 사용 시 다양한 제약이 발생합니다.ABAP 타입 HANA SQLScript 타입 CDS 직접 노출 CHAR(n) NVARCHAR(n) ✅ 가능 SSTRING NVARCHAR(≤1333) ✅ 가능 STRING NCLOB ❌ 불가 RAWSTRING BLOB ❌ 불가 2. CDS View / Consumption View에서의 제약
① SELECT 시 직접 노출 불가
// ❌ 활성화 오류 — STRING/CLOB은 CDS에서 직접 사용 불가 define view ZI_MyEntity as select from ztable { key mykey, string_field // 활성화 오류! } // ✅ CAST로 변환 필수 define view ZI_MyEntity as select from ztable { key mykey, cast(string_field as abap.char(1000)) as string_field }⚠️ cast 길이는 실제 데이터 최대 길이보다 크게 잡아야 잘림(truncation) 방지② WHERE 절 / @Consumption.filter 사용 불가
// ❌ STRING 컬럼에 직접 필터 → 런타임 오류 where string_field = 'ABC'→
@Consumption.filter어노테이션도 STRING 필드엔 적용되지 않음③ Association 키 / JOIN 조건으로 사용 불가
STRING 필드는 Primary Key 또는 Association의 ON 조건으로 사용할 수 없습니다.
3. AMDP SQLScript에서의 제약
① NCLOB 비교 주의
-- ❌ NCLOB 직접 비교 — 불가 또는 성능 극히 저하 WHERE string_field = 'ABC' -- ✅ CAST 후 비교 WHERE CAST(string_field AS NVARCHAR(500)) = 'ABC'② GROUP BY / ORDER BY / DISTINCT 사용 불가
-- ❌ NCLOB은 GROUP BY, ORDER BY, DISTINCT 사용 불가 GROUP BY string_field -- ✅ CAST 후 사용 GROUP BY CAST(string_field AS NVARCHAR(200))③ Table Function 반환 타입에 STRING 불가
" ❌ 반환 구조체에 STRING 필드가 있으면 AMDP 활성화 오류 CLASS-METHODS get_data RETURNING VALUE(rt_result) TYPE TABLE OF zst_with_string. " ✅ 반환용 구조체는 CHAR / NUMC / DATS 등 고정 길이 타입으로 별도 정의4. 최적 전략 — 상황별 결정 가이드
STRING 필드 발견 │ ├─ 신규 개발 / 테이블 변경 가능? │ └─ YES → ① DB 타입 변경 (근본 해결) │ └─ 레거시 / 테이블 변경 불가? ├─ 데이터 길이 예측 가능 (≤ 1333자)? │ └─ YES → ② SSTRING 또는 CHAR(N) 변환 │ └─ 길이 불명확 or 대용량 텍스트? └─ ③ Interface View CAST 래퍼 패턴① DB 타입 변경 (신규 개발 시 최우선)
용도 추천 타입 이유 일반 텍스트 (≤255자) CHAR(N) CDS/AMDP 완전 호환 중간 길이 (≤1333자) SSTRING 가변길이 + CDS 노출 가능 장문 (메모·설명) CHAR(1333) CLOB 회피하면서 최대 수용 ⚠️ STRING → SSTRING 변경은 SE11에서 테이블 조정(Table Adjustment) 필요 → BASIS/전송 일정 협의② Interface View CAST 래퍼 패턴 (레거시 — 가장 현실적인 정답)
💡 핵심 원칙: CAST는 최하위 레이어(ZI_ Interface View)에서 딱 한 번만 → 상위 레이어는 일반 CHAR처럼 사용-- ✅ ZI_ (Interface View): STRING → CHAR 변환은 여기서만! define view entity ZI_MyDoc as select from ztable { key docno, cast(long_text as abap.char(1000)) as long_text, cast(remark as abap.char(500)) as remark }-- ✅ ZC_ (Consumption View): 이미 CHAR이므로 필터/정렬 모두 가능 define view entity ZC_MyDoc as select from ZI_MyDoc { key docno, long_text, remark }-- ✅ AMDP도 ZI_ 뷰를 소스로 참조 → CAST 불필요 RETURN SELECT key_field, long_text, remark FROM zi_mydoc WHERE mandt = SESSION_CONTEXT('CLIENT');③ CAST 길이 산정 가이드
-- 실측 확인 쿼리 (SE16N 또는 AMDP 내부) SELECT MAX(LENGTH(string_field)) FROM ztable-- ❌ 무조건 크게 → 성능 손해 cast(text as abap.char(5000)) -- ✅ 실측 최대값 + 20% 여유 cast(text as abap.char(500))5. 최종 체크리스트
- CDS View에서 STRING 필드 →
cast(... as abap.char(N))적용 - 반환 구조체(TYPE 정의)에 STRING 제거 → CHAR(N)으로 대체
- AMDP WHERE 조건에 NCLOB 직접 비교 금지 → CAST 후 비교
- GROUP BY / ORDER BY 대상에 NCLOB 제외
- Association 키 / CDS Filter 대상으로 STRING 사용 금지
- CAST 길이는 실제 데이터 MAX 길이 + 20% 여유분 설정
- CAST는 ZI_ Interface View 한 곳에서만 처리 (중복 방지)
- 신규 테이블 설계 시 처음부터 SSTRING 또는 CHAR(N) 사용
6. 한 줄 요약
상황 추천 전략 신규 테이블 설계 처음부터 SSTRING또는CHAR(N)사용레거시 (변경 가능) SE11에서 SSTRING으로 타입 변경 + 테이블 조정레거시 (변경 불가) Interface CDS View 한 곳에서 CAST 처리
AMDP는 해당 CDS View를 소스로 참조'SAP' 카테고리의 다른 글
New ABAP 유용한 구문 정리 (0) 2026.05.15 AMDP SQLScript 날짜·시간 함수 (0) 2026.05.14 AMDP에서 WITH 구문(CTE) 활용하기 (0) 2026.05.13 AMDP SQLScript — Consumption Entity & Table Function 정리 (0) 2026.05.13 SAP ABAP 호출 구조 정리 — Entity · Query Provider · AMDP (0) 2026.05.12 - CDS View에서 STRING 필드 →