본문 바로가기
DB/ORACLE,HANA

[S4/HANA] ORACLE -> HANA SQL Query 변환 팁

by ESTP 개발자 2023. 3. 10.

먼저 글의 순서는 ORACLE -> HANA입니다. 참고해주세요

 

너무 잘 정리 되어서 내용 그대로 제 블로그에 적었습니다..

[SAP HANA 기획연재] 개발부터 성능튜닝까지 이렇게 끝낸다 (his21.co.kr)

 

1. DUAL => DUMMY

2. DECODE > MAP

3. RANK

RANK() OVER (PARTITION BY expression ORDER BY window_order_by_clause)

4. DENSE_RANK

DENSE_RANK() OVER(PARTITION BY expression ORDER BY window_order_by_clause)

5. ROWNUMBER

RANK나 DENSE RANK 함수가 동일한 값에 대해서는 같은 순위를 부여하는데 반해, 

ROW_NUBMER은 동일한 값이라도 고유한 순위를 부여

SELECT ProdName, Type, Sales,
  ROW_NUMBER() OVER (PARTITION BY ProdName ORDER BY Sales DESC) AS row_num
FROM ProductSales
ORDER BY ProdName, Sales DESC;

6. RPAD

문자열 끝에 패턴 12345를 오른쪽에 붙여 15자 길이의 문자열을 만들고 end123451234512 값을 리턴합니다.

SELECT RPAD ('end', 15, '12345') "right padded" FROM DUMMY;

7. LEAD

Expression 칼럼의 현재 row에서 offset만큼의 전의 row 값을 가져옵니다.

 

 

 

 

 

기존에 오라클에서 개발한 SQL을 SAP HANA에서 사용할 경우에는 SAP HANA에 맞게 SQL 변환을 해주어야 합니다. 변경을 해야 하는 사항은

 

1. 오라클 HINT 문 삭제
     - 오라클 HINT문은 SAP HANA에 맞지 않습니다.

2. NVL ▶ IFNULL 또는 COALESCE
     SELECT NVL(A.ID,0) FROM TAB A
   >SELECT IFNULL(A.ID,’TEST’) FROM TAB A(IFNULL은 NVL과 동일)
   >SELECT COALESCE(A.ID,A.TEXT,’TEST’) FROM TABLE A
     (COALESCE 는 INPUT 변수가 2개 이상 일 경우도 사용가능)

3. DECODE ▶ MAP 또는 CASE WHEN
     SELECT DECODE(A.ID,’TEST’,A.TEXT,’TEST2’)FROM TAB A
   >SELECT MAP(A.ID,’TEST’,A.TEXT,’TEST2’) FROM TAB A(MAP은 DECODE와 동일)
   >SELECT CASE WHEN A.ID = ‘TEST’ THEN A.TEXT ELSE ‘TEST2’ END FROM TABA

4. ROWNUM=1 ▶ TOP 1
     SELECT A.ID FROM TAB WHERE ROWNUM = 1
   >SELECT TOP 1 A.ID FROM TAB(HANA DB에서는 ROWNUM이 없으므로 이를 대체할 수 있게 TOP 또는
     ROW_NUMBER() 등으로 변환)

5. LEFT OUTER JOIN
     SELECT A.CODE, B.CODE FROM TAB A, TAB2 B WHERE A.CODE = B.CODE(+)
   >SELECT A.CODE, B.CODE FROM TAB A LEFT OUTER JOIN TAB2 B ON A.CODE = B.CODE

6. SYSDATE ▶ NOW(),, DUAL ▶ DUMMY
     SELECT SYSDATE FROM DUAL
   >SELECT NOW() FROM DUMMY

7. DEPLACE ▶ SUBSTR_BEFORE  

     SELECT* FROM FWWIPHISTORY WHERE DEPLACE(ID, '.') = 'PM-5005-Q_SL'
   >SELECT * FROM FWWIPHISTORY WHERE SUBSTR_BEFORE(ID,'.') = 'PM-5005-Q_SL'

 

deplace ...는 아직 뭔지 못 찾았습니다.... replace일까요?

8. VARCHAR2 ▶ VARCHAR
     CREATE TABLE TAB (ID VARCHAR2(5) )
   >CREATE TABLE TAB (ID VARCHAR(5) )

 

이외에도 WITH문이나 CONNECT BY PRIOR 문과 같은 오라클에서만 사용 가능한 기능은 SAP HANA에 맞게 변환을 해주어야 합니다.

 

www.stechies.com/differences-between-sap-hana-oracle-sql/

Difference between Oracle and SAP HANA in SQL Queries (stechies.com)
위 주소의 코드를 정리했습니다.

'DB > ORACLE,HANA' 카테고리의 다른 글

[Oracle] 자주 쓰는 쿼리  (0) 2023.05.17
PL/SQL 테이블 구조, 테이블 칼럼만 보는 단축키  (0) 2023.04.06
[오라클] 인덱스  (0) 2023.03.24
Oracle -> S4Hana translate 대체 함수  (0) 2023.03.13

댓글