求大神帮帮忙!
你这是什么显示器?
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;