sql >> データベース >  >> RDS >> PostgreSQL

OracleMERGEステートメントをPostgreSQLUPSERTステートメントに移行する

    PostgreSQL 9.3にUPSERTステートメントはないと思いますが、これは可能です:

    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)
    

    同様の質問をいくつか読むことができます:



    1. ストアドプロシージャのパラメータとしてリストを渡すにはどうすればよいですか?

    2. データベースから現在のユーザーIDを取得して、新しいテーブルで使用します

    3. Oracle挿入の失敗:有効な月ではありません

    4. 日付/時刻範囲を日ごとに分割するには、OracleSQLが必要です