Объединить в postgresql 12,2 - PullRequest
0 голосов
/ 02 мая 2020

Слияние не поддерживается postgresql, вместо этого мы должны использовать upsert, вставка при конфликте в postgre. У меня есть следующее слияние в oracle. Я бы знал, какая будет правильная форма в postgres.

MERGE INTO itm m
      USING(SELECT rec.xncPRCNEW   AS IMPPRCNEW,
                    rec.xncCSSTDT   AS IMPCSSTDT,
                   ) h
      ON ((m.IMPITMID = loc_IMPVDRITMID or m.IMPVDRITMID = loc_IMPVDRITMID) 
      AND m.IMPVDRID = loc_VDRID AND (coalesce(m.IMPSITE, 0) = coalesce(loc_IMPSITE, 0) or coalesce(m.IMPZONE, 0) = coalesce(loc_IMPSITE, 0)) and m.IMPSTDT = TO_DATE(rec.xncCSSTDT, 'MM/DD/YYYY') and m.IMPEDDT = TO_DATE(rec.xncCSENDT, 'MM/DD/YYYY'))
      WHEN MATCHED THEN
        UPDATE
           SET m.IMPCHG    = h.IMPPRCNEW,
               m.IMPSTS    = CASE WHEN CASE WHEN loc_autoapp=1 THEN  'VP'  ELSE 'SB' END ='SB' THEN (CASE WHEN loc_count=0 THEN  'SB'  ELSE 'VP' END )  ELSE CASE WHEN loc_autoapp=1 THEN  'VP'  ELSE 'SB' END  END ,
      WHEN NOT MATCHED THEN
        INSERT(IMPID,
           IMPITMID,
           IMPLVID,
           IMPITMDESC,
           IMPVDRCCNO)
        VALUES
          (nextval('mass_purchaseprice_sqn'),
           trim(both substr(rec.xncitmid,
                       INSTR(rec.xncitmid, ']', 1, 3) + 1,
                       300)),
           CASE WHEN CASE WHEN loc_autoapp=1 THEN  'VP'  ELSE 'SB' END ='SB' THEN (CASE WHEN loc_count=0 THEN  'SB'  ELSE 'VP' END )  ELSE CASE WHEN loc_autoapp=1 THEN  'VP'  ELSE 'SB' END  END ,
           (select vdrccno
              from vdrgen
             where vdrextno =
                   substr(rec.xncvdrid,
                          1,
                          position(' - ' in rec.xncvdrid) - 1)));

      RAISE NOTICE 'test3';
    END;

. В этом случае мы имеем оба, когда совпадает, а не совпадает регистр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...