PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Migracja wyciągu Oracle MERGE do wyciągu PostgreSQL UPSERT

Wydaje mi się, że w PostgreSQL 9.3 nie ma instrukcji UPSERT, ale możesz to zrobić:

with cte_dual as (
    select
        v_c1 as key,
        v_c2 as pkey,
        v_c3 as wcount,
        v_c4 as dcount
), cte_update as (
    update my_table as a set
        wcount = b.wcount,
        dcount = b.dcount
    from cte_dual as b
    where b.key = a.key and b.pkey = a.pkey
    returning *
)
insert into my_table (key, pkey, wcount, dcount)
select d.key, d.pkey, d.wcount, d.dcount
from cte_dual as d
where not exists (select * from cte_update as u WHERE u.key = d.key and u.pkey = d.pkey)

Możesz przeczytać kilka podobnych pytań:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pg_query_params zwraca błąd:komunikat bind dostarcza 2 parametry, ale przygotowana instrukcja wymaga 1

  2. Jak działa pg_typeof() w PostgreSQL

  3. nieprawidłowa sekwencja bajtów do kodowania UTF8

  4. Sortuj agregację tekstu utworzoną za pomocą array_agg w postgresql

  5. Nie rób nic w procedurze wyzwalania