-
Oracle CONNECT BY LEVEL → AMDP SERIES_GENERATE_INTEGER 변환SAP 2026. 6. 9. 18:21oracle-connect-by-to-amdp.html0.01MB
Oracle CONNECT BY LEVEL → AMDP SERIES_GENERATE_INTEGER 변환 Oracle CONNECT BY LEVEL → AMDP SERIES_GENERATE_INTEGER 변환
1. 기본 변환 패턴
Oracle에서 순번을 생성할 때 자주 쓰는
CONNECT BY LEVEL패턴은 HANA SQLScript에서SERIES_GENERATE_INTEGER로 대체한다.OracleSELECT LEVEL AS num FROM DUAL CONNECT BY LEVEL < 10AMDP SQLScriptRETURN SELECT GENERATED_PERIOD_START AS num FROM SERIES_GENERATE_INTEGER(1, 1, 9);함수 인자 구조
SERIES_GENERATE_INTEGER( increment, start, end ) -- ↑ ↑ ↑ -- 간격 시작 끝값(포함)Oracle AMDP SQLScript 설명 FROM DUAL제거 HANA에서 DUAL 불필요 CONNECT BY LEVEL < 10SERIES_GENERATE_INTEGER(1, 1, 9)< 10 이므로 끝값은 9 LEVEL <= 10SERIES_GENERATE_INTEGER(1, 1, 10)<= 이면 끝값 그대로 LEVEL(컬럼)GENERATED_PERIOD_START생성된 정수값 컬럼명 💡 GENERATED_PERIOD_START 외에도GENERATED_PERIOD_END컬럼이 함께 생성된다. 보통GENERATED_PERIOD_START만 사용하면 된다.2. 서브쿼리(인라인 뷰) 활용
서브쿼리 안에서도 동일하게 사용 가능하다.
RETURN SELECT t.num, t.num * t.num AS square FROM ( SELECT GENERATED_PERIOD_START AS num FROM SERIES_GENERATE_INTEGER(1, 1, 9) ) AS t WHERE t.num > 5;💡 서브쿼리로 감싸서 별칭(AS t)을 부여하면 이후WHERE,JOIN등에서 자유롭게 참조 가능하다.3. CTE(WITH절) 활용 — 권장
서브쿼리보다 가독성이 좋고 재사용이 쉬운
WITH절 방식을 권장한다.RETURN WITH nums AS ( SELECT GENERATED_PERIOD_START AS num FROM SERIES_GENERATE_INTEGER(1, 1, 9) ) SELECT num, num * num AS square FROM nums WHERE num > 5;4. 실무 활용 패턴
4-1. 날짜 시퀀스 생성 (달력 JOIN)
-- 오늘부터 30일치 날짜 목록 생성 RETURN WITH date_series AS ( SELECT ADD_DAYS(CURRENT_DATE, GENERATED_PERIOD_START - 1) AS cal_date FROM SERIES_GENERATE_INTEGER(1, 1, 30) ) SELECT d.cal_date, COALESCE(s.sales_amt, 0) AS sales_amt FROM date_series AS d LEFT OUTER JOIN daily_sales AS s ON d.cal_date = s.sales_date AND s.mandt = SESSION_CONTEXT('CLIENT') ORDER BY d.cal_date;4-2. 다른 테이블과 JOIN (행 번호 매기기)
-- 조회 결과에 순번 부여 (ROW_NUMBER 대안) RETURN WITH base AS ( SELECT vbeln, kunnr, netwr FROM vbak WHERE mandt = SESSION_CONTEXT('CLIENT') ORDER BY erdat DESC ), nums AS ( SELECT GENERATED_PERIOD_START AS rn FROM SERIES_GENERATE_INTEGER(1, 1, 100) ) SELECT n.rn, b.vbeln, b.kunnr, b.netwr FROM base AS b JOIN nums AS n ON n.rn = ROW_NUMBER() OVER (ORDER BY b.netwr DESC);⚠️ 끝값 주의
LEVEL < 10→ end = 9 (끝값 미만)
LEVEL <= 10→ end = 10 (끝값 이하)
Oracle 조건을 그대로 옮길 때 < / <= 구분을 반드시 확인한다.5. 변환 요약
Oracle 패턴 AMDP 변환 비고 FROM DUAL CONNECT BY LEVEL < NFROM SERIES_GENERATE_INTEGER(1, 1, N-1)끝값 = N-1 FROM DUAL CONNECT BY LEVEL <= NFROM SERIES_GENERATE_INTEGER(1, 1, N)끝값 = N 인라인 뷰(서브쿼리) 서브쿼리 그대로 사용 가능 별칭 필수 — WITH절(CTE) 방식 권장 가독성 ↑, 재사용 ↑ LEVEL컬럼GENERATED_PERIOD_START정수값 컬럼명 'SAP' 카테고리의 다른 글
oracle to amdp : generator (HTML version) (0) 2026.06.10 Oracle SUBSTRB → SAP HANA SQLScript 변환 가이드 (0) 2026.06.10 AMDP SQLScript — CURSOR & ::ROWCOUNT 정리 (0) 2026.06.08 ABAP OPEN DATASET - itab 서버 파일 저장 (0) 2026.06.05 ABAP 정규식 빌더 (0) 2026.06.02