설문조사
PostgreSQL/PPAS 관련 듣고 싶은 교육은


총 게시물 94건, 최근 0 건
   

Oracle Merge 변환시 주의점

글쓴이 : PostgresDBA 날짜 : 2017-09-19 (화) 12:28 조회 : 9212

오라클 merge syntax 를 EPAS/PostgreSQL 에서 지원하지 않으므로

   update..returning 절이나 on conflict 절로 바꿔야 합니다.

   단 on conflict 절은 9.5 버전 부터 지원하는데 다음 제약사항이 있습니다.

   - 해당 테이블이 파티션 테이블이면 미지원

   - 해당 테이블에 pk/uk 가 없으면 미지원

   이럴땐 예전방식인 update..returning 절로 밖에 대체할수 없습니다.


샘플)

MERGE INTO myTable2 m

USING myTable d ON (m.pid = d.pid)

WHEN MATCHED THEN

UPDATE SET m.sales = m.sales + d.sales , m.status = d.status

WHEN NOT MATCHED THEN

INSERT VALUES ( d.pid ,d.sales ,'NEW' );

=>

WITH upsert AS

(

UPDATE mytable2 m SET sales = m.sales + d.sales , status = d.status

FROM mytable d

WHERE m.pid = d.pid RETURNING m.*

)

INSERT INTO mytable2 SELECT a.pid ,a.sales ,'NEW‘

FROM mytable a

WHERE a.pid NOT IN ( SELECT b.pid FROM upsert b );


주킹 2017-10-19 (목) 16:11
9.5에서는 이게 가능합니다.
INSERT INTO myTable2 AS m (pid,sales,status)
SELECT d.pid,d.sales,’NEW’
from mytable d
ON CONFLICT (pid)
DO UPDATE SET m.sales= m.sales+ EXCLUDED.sales,m.status= EXCLUDED.status;
댓글주소
   

postgresdba.com