ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle SUBSTRB → SAP HANA SQLScript 변환 가이드
    SAP 2026. 6. 10. 18:22

    oracle_substrb_to_hana.html
    0.01MB

     

     

    Oracle SUBSTRB → SAP HANA SQLScript 변환 가이드

    Oracle SUBSTRB → SAP HANA SQLScript 변환 가이드

    Oracle Migration · AMDP SQLScript · S/4HANA On-Premise

    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 로 단순 교체하면 된다.
    OracleSAP 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에서 SUBSTRBlen값이 바이트 기준으로 설계된 경우, 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 코드 단순 이식 목적 SUBSTRBSUBSTR 으로 교체
    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
Designed by Tistory.