如何用pgsql修改oracle中的merge into

求大神帮帮忙!

img

你这是什么显示器?

pgsql有专门的连接插件fdw,你可以试试,用这个连接oracle,如果是想在pg使用merge into的话,pg不支持,你可以试试 WITH ,也能达到这个效果

WITH upsert AS (
  UPDATE test1
  SET name = test2.name
  FROM test2
  WHERE test1.id = test2.id
  RETURNING test1.*
 )
INSERT INTO test1
SELECT *
FROM test2
WHERE NOT EXISTS (
 SELECT 1
 FROM upsert b
 WHERE test2.id = b.id
);

1、这个在pgsql中也是有对应的语句的,不过需要为card_type和card_no列(冲突判定列)建议唯一索引(当然是主键更好)
可使用以下语句替换:

    WITH t AS (
        SELECT *
          FROM TB_PRO_RELPARTY_CREDIT
         WHERE tr_date BETWEEN to_char( date_trunc( 'quarter', now( ) ), 'yyyymmdd' )
                           AND to_char( date_trunc( 'quarter', now( ) ) + '3 mon -1 d'::INTERVAL, 'yyyymmdd' ) )
    INSERT INTO TB_PRO_QUARTER_CREDIT ( card_type, card_no, group_code, creditbalance, tr_date )
        SELECT card_type, card_no, group_code, creditbalance, v_job_date FROM t
    ON CONFLICT ON CONSTRAINT "card_type和card_no的联合唯一索引或主键名称"
        DO UPDATE SET creditbalance = EXCLUDED.creditbalance, tr_date = EXCLUDED.tr_date
            WHERE creditbalance < EXCLUDED.creditbalance;