Programing

Oracle TO PostgreSQL 변환 시 검토사항

handam 2021. 2. 22. 12:55
반응형

1. DUAL
오라클에서 사용하는 DUAL 은 제외하고 사용한다.
SELECT 1 FROM DUAL 과 같이 DUAL 을 사용할 수 없다.
EX> SELECT 1 로만 작성하면 된다.

2. SYSDATE
NOW() 함수를 사용한다.
EX> SELECT TO_CHAR(NOW(), 'YYYY-MM-DD')

3. NVL
COALESCE 함수를 사용한다
SELECT COALESCE(USER_ID, 0) FROM USER_INFO

4. SEQUENCE (시퀀스)
오라클 시퀀스 문법은 시퀀스명.NEXTVAL
PostgreSQL 에서는 NEXTVAL('시퀀스명') 으로 사용한다.

5. ROWNUM
오라클(Oracle)에서 사용하는 ROWNUM 을 PostgreSQL에서 사용하는 방법

▶ WHERE 절에서 사용
SELECT USER_ID FROM USER_INFO LIMIT 3

▶ SELECT 절에서 사용
SELECT (ROW_NUMBER() OVER()) AS ROWNUM , USER_ID FROM USER_INFO
==> ROW_NUMBER() OVER() 함수를 통하여 ROWNUM을 생성한다.

6. DECODE
PostgreSQL에서는 DECODE 함수를 제공하지 않는다.
CASE문으로 변경한다.
CASE WHEN REG_TYPE = '003' THEN ITEM_TYPE ='QM' ELSE ITEM_TYPE ='GN' END

7. 데이터 형변환
컬럼 혹은 값에 ::[변환할 데이터타입] 을 붙여서 변환
EX> SELECT '1'::int

8. OUTER JOIN


▶ 오라클
SELECT D.DNAME, E.EMP_NO FROM DEPT D, EMP E
WHERE D.DEPT_NO = E.DEPT_NO(+)


▶ PostgreSQL
SELECT D.DNAME, E.EMP_NO
FROM DEPT D
LEFT OUTER
JOIN EMP E ON D.DEPT_NO = E.DEPT_NO;


PostgreSQL에서는 ANSI SQL 표준을 사용(오라클에서도 정상 동작)
RIGHT OUTER JOIN, FULL OUTER JOIN도 사용 가능.

9. MERGE INTO의 경우는 쿼리문을 분리하여 처리로직으로 변경해준다.  

변경방법은 아래 두가지중에 하나를 선택해도 되고 다른 방법을 써도 된다.

9-1 조건이 맞는지(MATCHED)에 대한 SELECT문을 실행시켜서 결과값이 있으면 UPDATE문을 실행시켜 주고 결과값이 없으면 INSERT문을 실행시켜준다.

9-2 UPDATE문을 실행해서 UPDATE가 일어나면 그대로 가고 UPDATE가 일어나지 않으면 INSERT문을 실행시킨다.

10. START WITH CONNET BY 문은 WITH를 사용한 RECURSIVE 쿼리로 변경

반응형