-
Oracle SUBSTRB → SAP HANA SQLScript 변환 가이드SAP 2026. 6. 10. 18:22oracle_substrb_to_hana.html0.01MB
Oracle SUBSTRB → SAP HANA SQLScript 변환 가이드 Oracle SUBSTRB → SAP HANA SQLScript 변환 가이드
1. SUBSTRB 란?
Oracle의
SUBSTRB는 바이트(Byte) 단위로 문자열을 자르는 함수이다. 반면SUBSTR은 문자(Character) 단위로 동작한다.함수 단위 한글 1자 처리 SUBSTR(str, 1, 10)문자(Character) 1자 = 1카운트 SUBSTRB(str, 1, 10)바이트(Byte) 인코딩에 따라 2~3바이트 2. SAP HANA에서의 대안 — 결론 먼저
💡 S/4HANA On-Premise는 HANA DB = Unicode(UTF-8) 전용이므로, Oracle 코드 이식 목적이라면SUBSTR로 단순 교체하면 된다.Oracle SAP HANA SQLScript 비고 SUBSTRB(col, pos, len)SUBSTR(col, pos, len)문자 단위, Unicode 환경에서 안전 SUBSTR(col, pos, len)SUBSTR(col, pos, len)동일 — 그대로 사용 ⚠️SUBSTR_BYTES는 SAP HANA 공식 SQL 함수가 아니다. 검색해도 나오지 않는 것이 정상이므로 사용하지 말 것.3. Oracle SUBSTRB → HANA 올바른 대안
바이트 단위 처리가 반드시 필요한 경우, 아래 세 가지 대안을 상황에 맞게 선택한다.
방법 1:
TO_BINARY+SUBSTRING조합 (바이트 단위 추출)문자열을
VARBINARY로 변환한 뒤 바이트 단위로 잘라내고, 다시 문자열로 변환한다.-- VARBINARY 변환 후 바이트 단위 추출 SELECT TO_NVARCHAR(SUBSTRING(TO_BINARY(col), 1, 10)) AS short_name FROM ztable;⚠️ 한글이 포함된 경우 UTF-8 바이트 경계 중간에서 잘릴 수 있어 깨진 문자가 반환될 수 있다. 바이트 경계 정합성이 보장된 컬럼에만 사용할 것.방법 2:
OCTET_LENGTH— 바이트 길이 확인용실제 추출이 아닌, 컬럼의 바이트 길이를 확인할 때 사용한다.
-- 컬럼의 바이트 길이 확인 SELECT OCTET_LENGTH(col) AS byte_len, LENGTH(col) AS char_len FROM ztable;방법 3:
SUBSTR— 현실적 권장 방법 ✅S/4HANA On-Premise는 Unicode(UTF-8) 전용이므로, Oracle 코드 이식 목적이라면
SUBSTR로 단순 교체하는 것이 가장 안전하고 실용적이다. 단,len값이 바이트 기준으로 설계된 경우 4절의 길이 조정을 함께 적용한다.-- Oracle: SUBSTRB(col, 1, 20) -- HANA: SUBSTR(col, 1, 20) ← 문자 단위, Unicode 환경에서 안전 SELECT SUBSTR(col, 1, 20) AS short_name FROM ztable;대안 바이트 정밀도 추천 상황 TO_BINARY + SUBSTRING✅ 정확한 바이트 단위 바이트 경계가 명확히 보장된 ASCII/이진 데이터 OCTET_LENGTH— (길이 확인만) 바이트 길이 검증, 조건 분기용 SUBSTR✅문자 단위 (Unicode 환경 충분) Oracle 코드 이식, 한글 포함 일반 문자열 4. 변환 예시 (단순 이식)
Oracle 원본
-- Oracle: 바이트 단위로 20바이트 추출 SELECT SUBSTRB(item_name, 1, 20) AS short_name FROM zitem;HANA SQLScript (AMDP 내부)
-- HANA: 문자 단위로 20자 추출 (Unicode 환경에서 동일 효과) lt_result = SELECT SUBSTR(item_name, 1, 20) AS short_name FROM :lt_input;5. ⚠️ 길이값(len) 조정이 필요한 경우
Oracle에서
SUBSTRB의len값이 바이트 기준으로 설계된 경우, HANA에서 문자 단위로 바꾸면 길이 재계산이 필요하다.Oracle 인코딩 한글 1자 바이트 len 조정 방법 AL32UTF8(UTF-8)3바이트 len ÷ 3→ 문자 수
예:SUBSTRB(col,1,30)→SUBSTR(col,1,10)KO16KSC5601/KO16MSWIN949(EUC-KR)2바이트 len ÷ 2→ 문자 수
예:SUBSTRB(col,1,20)→SUBSTR(col,1,10)영문 ASCII만 포함 1바이트 len 그대로 사용 가능 💡 Oracle DB 인코딩 확인 쿼리SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';6. 의사결정 흐름
조건 처리 방법 Oracle 코드 단순 이식 목적 SUBSTRB→SUBSTR으로 교체Oracle 인코딩이 UTF-8이었고 len이 바이트 기준 SUBSTR(col, pos, len/3)로 len 조정Oracle 인코딩이 EUC-KR이었고 len이 바이트 기준 SUBSTR(col, pos, len/2)로 len 조정영문 ASCII 데이터만 다루는 컬럼 len 그대로 유지, SUBSTR교체#Oracle마이그레이션 #SUBSTRB #HANA_SQLScript #AMDP #S4HANA #문자열함수 #Oracle_to_HANA'SAP' 카테고리의 다른 글
ABAP 타입풀 상수명 추출 (0) 2026.06.12 oracle to amdp : generator (HTML version) (0) 2026.06.10 Oracle CONNECT BY LEVEL → AMDP SERIES_GENERATE_INTEGER 변환 (0) 2026.06.09 AMDP SQLScript — CURSOR & ::ROWCOUNT 정리 (0) 2026.06.08 ABAP OPEN DATASET - itab 서버 파일 저장 (0) 2026.06.05