본문 바로가기
Programming/PostreSQL

[postgresql] oracle 에서 postgresql 로 이관

by NAMP 2016. 4. 28.

오라클에서 사용한 SQL 문을 POSTGRESQL 로 이관하면서 다른 점들을 해결한다.

DUAL

오라클에서 사용하는 DUAL 은 제외하고 사용하면 된다.

SELECT 1 FROM DUAL 과 같이 DUAL 을 사용할 수 없다.
SELECT 1 으로만 작성하면 된다.

SYSDATE

now() 함수를 사용한다

select now()

ROWNUM

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

WHERE 절에서 사용

SELECT USER_ID
  FROM USER_INFO
 LIMIT 3

조회된 자료에서 3건의 데이터만 보여준다.

SELECT 절에서 사용

SELECT (ROW_NUMBER() OVER()) AS ROWRUM
     , USER_ID
  FROM USER_INFO

ROW_NUMBER() 함수를 통하여 ROWNUM을 생성한다.

BETWEEN

WHERE ROWNUM BETWEEN 1 AND 10

아래와 같이 변경한다.

SELECT * FROM
	(SELECT (ROW_NUMBER() OVER()) RN )
WHERE RN BETWEEn 1 AND 10

만약 XML로 작성 중에 부등호를 사용한다면 CDATA를 사용한다.

		<![CDATA[
		WHERE RN >= #{startPageNum} AND RN <= #{endPageNum}
		]]>
SELECT 商品ID, 商品名, 卸単価 FROM 商品マスタ
     WHERE 卸単価 IS NOT NULL
     ORDER BY 卸単価 DESC
     LIMIT 3 OFFSET 2;
SELECT *
     FROM (SELECT 商品ID, 商品名, 卸単価, ROWNUM line
          FROM (SELECT * FROM 商品マスタ
               WHERE 卸単価 IS NOT NULL
               ORDER BY 卸単価 DESC ))
     WHERE line BETWEEN 3 AND 5;

DECODE

decode 는 case 문으로 변경한다.

DECODE(Z.REG_TYPE,'003',Z.REG_TYPE_NAME,Z.EVENT_TYPE_NAME)

case 문으로 변경한다.

CASE WHEN Z.REG_TYPE = '003' 
	THEN Z.REG_TYPE_NAME
	ELSE Z.EVENT_TYPE_NAME
END

ALIAS 로 CONTENT 를 사용하는 경우

아래와 같은 쿼리문을 실행하면 에러 발생

SELECT event_seq content FROM EVENT_INFO
ERROR:  syntax error at or near "content"
LINE 1: SELECT event_seq content FROM EVENT_INFO
                         ^
********** Error **********

ERROR: syntax error at or near "content"
SQL state: 42601
Character: 18

아래와 같이 AS 를 넣어줘야 한다.

SELECT event_seq as content FROM EVENT_INFO

출처


'Programming > PostreSQL' 카테고리의 다른 글

Postgresql 버전 확인  (0) 2017.04.06
Postgresql - DBLINK  (0) 2016.08.31
[PostgreSQL] 기본 강좌 정리 02  (0) 2016.04.13
[PostgreSQL] 기본 강좌 정리 01  (0) 2016.04.12
PostGIS  (0) 2016.04.10

댓글