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

OracleマージをPostgreSQLへのクエリに変換する必要があります

    INSERT ON CONFLICT ()を使用できます 代わりに:

    insert into feepay.TRPT_W2_REPORTS (ACCOUNT, URN, LAST_NAME, FIRST_NAME, ISENTITY, DOB, ADDRESS, LAST_UPDATE, STATUS)
    WITH RWS AS (
      SELECT PROG.BINCLIENT, TRPT.PUT_DIRECTORY
      FROM  feepay.program2 PROG
        INNER JOIN  feepay.TRPT_W2_PROGRAMS TRPT
                ON (PROG.BINCLIENT = TRPT.BINCLIENT OR PROG.ISSUER_ID = TRPT.ISSUER_ID)
    )
    SELECT TCI.CUSTOMERNAME,
           TC.CUSTOMER_ID,
           TC.LAST_NAME,
           TC.FIRST_NAME,
           'Y'
           TC.DOB,
           TCA.ADDRESS, 
           now(), 
           'i'
    FROM feepay.TAU_CARDNUMBERS TCN
      INNER JOIN feepay.TAU_CUSTOMER_CARDNUMBER TCCN ON (TCN.CARDNUMBER_ID = TCCN.CARDNUMBER_ID)
      INNER JOIN feepay.TBLCUSTOMERS TC ON (TCCN.CUSTOMER_ID = TC.CUSTOMER_ID)
      LEFT JOIN feepay.tau_customeraddress TCA ON (TC.CUSTOMER_ID = TCA.CUSTOMER_ID)
      INNER JOIN feepay.TAU_ISSUER TI ON (TI.ISSUER_ID = TCN.ISSUER_ID)
      INNER JOIN feepay.TBLCUSTOMERS TCI ON (TCI.CUSTOMER_ID = TI.CUSTOMER_ID)
      LEFT JOIN feepay.TRPT_W2_REPORTS TRPT ON (TRPT.URN = TC.CUSTOMER_ID)
    WHERE BINCLIENT IN (SELECT BINCLIENT FROM RWS)
      AND TC.CUSTOMERNAME NOT IN ('freepay card','svds card')) TRPT2
    ON CONFLICT (URN)
    DO UPDATE SET
      ACCOUNT = excluded.ACCOUNT,
      LAST_NAME = excluded.LAST_NAME,
      FIRST_NAME = excluded.FIRST_NAME,
      DOB = excluded.DOB,
      ADDRESS = excluded.ADDRESS,
      LAST_UPDATE = now(),
      STATUS = 'u' /* uPDATED */
    

    SELECTリストの列がINSERT列リストにリストされている列と一致するかどうかを確認する必要があります。




    1. SQLServerの論理演算子とは-SQLServer/TSQLチュートリアルパート124

    2. OracleでPLSQLコードをラップする方法は?

    3. SQLServerの一時テーブルの概要

    4. MySQLの集計関数-リスト(OracleのLISTAGGなど)