오라클 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 );