DEL_FLAG , CREATION_TIME, PK_CREATOR, MODIFIED_TIME, PK_MODIFIED, PK_COUNTRY, PK_ID, PK_BASE_ID, REGISTER_AUTHORITY, PK_PRODUCT, SPECS_NAME, SPECS_NAME_ID, QUANTITY, LEVEL DECLARE v_error_count NUMBER := 0; BEGIN BEGIN MERGE INTO AC_PICK tgt USING (SELECT adgr.PK_BASE_ID, so.PK_CREATOR AS PK_MEMBER, 32 AS PICK_TYPE, adgd.PK_PRODUCT AS PK_DATA_ID, adgd.SPECS_NAME, adgd.SPECS_NAME_ID, SUM(adgd.QUANTITY) AS USABLE_QUANTITY, bp.COVER AS PICK_COVER, 0 AS IS_FREE_MAIL, 0 AS DEL_FLAG, SUM(adgd.QUANTITY) AS BASE_QUANTITY, SYSDATE AS CREATION_TIME, 100000000 AS PK_CREATOR, #{pkCountry} AS PK_COUNTRY FROM AC_DECLARATION_GIFT_RECORD adgr LEFT JOIN AC_DECLARATION_GIFT_CONFIG adgc ON adgr.PK_RULE_ID = adgc.PK_ID LEFT JOIN AC_DECLARATION_GIFT_DETAIL adgd ON adgc.PK_ID = adgd.PK_RULE_ID LEFT JOIN BD_PRODUCT bp ON adgd.PK_PRODUCT = bp.PK_ID LEFT JOIN BD_PRODUCT_EXTEND bpe ON bp.PK_ID = bpe.PK_PRODUCT LEFT JOIN SA_ORDER so ON adgr.ORDER_CODE = so.ORDER_CODE WHERE adgr.SYNC_STATUS IN (0, 2) GROUP BY adgr.PK_BASE_ID, so.PK_CREATOR, adgd.PK_PRODUCT, adgd.SPECS_NAME, adgd.SPECS_NAME_ID, bp.COVER) src ON ( tgt.PICK_TYPE = src.PICK_TYPE AND tgt.PK_DATA_ID = src.PK_DATA_ID AND tgt.SPECS_NAME = src.SPECS_NAME AND tgt.SPECS_NAME_ID = src.SPECS_NAME_ID AND tgt.PK_BASE_ID = src.PK_BASE_ID AND tgt.DEL_FLAG = src.DEL_FLAG ) WHEN MATCHED THEN UPDATE SET tgt.USABLE_QUANTITY = tgt.USABLE_QUANTITY + src.USABLE_QUANTITY, tgt.MODIFIED_TIME = SYSDATE, tgt.PK_MODIFIED = src.PK_CREATOR WHEN NOT MATCHED THEN INSERT ( PK_ID, PK_MEMBER, PICK_TYPE, PK_BASE_CONFIG, PK_DATA_ID, SPECS_NAME, SPECS_NAME_ID, USABLE_QUANTITY, PICK_COVER, IS_FREE_MAIL, DEL_FLAG, BASE_QUANTITY, PK_BASE_ID, CREATION_TIME, PK_CREATOR, PK_COUNTRY ) VALUES (AC_PICK_SEQ.NEXTVAL, src.PK_MEMBER, src.PICK_TYPE, 0, src.PK_DATA_ID, src.SPECS_NAME, src.SPECS_NAME_ID, src.USABLE_QUANTITY, src.PICK_COVER, src.IS_FREE_MAIL, src.DEL_FLAG, src.BASE_QUANTITY, src.PK_BASE_ID, src.CREATION_TIME, src.PK_CREATOR, src.PK_COUNTRY); UPDATE AC_DECLARATION_GIFT_RECORD SET SYNC_STATUS = 1 WHERE SYNC_STATUS IN (0, 2); EXCEPTION WHEN OTHERS THEN v_error_count := SQL%ROWCOUNT; UPDATE AC_DECLARATION_GIFT_RECORD SET SYNC_STATUS = 2 WHERE SYNC_STATUS IN (0, 2); END; INSERT INTO AC_PICK_LOG (PK_ID, PK_PICK, PK_USER, QUANTITY, PK_COUNTRY) SELECT AC_PICK_LOG_SEQ.NEXTVAL, p.PK_ID, p.PK_CREATOR, p.USABLE_QUANTITY, p.PK_COUNTRY FROM AC_PICK p WHERE TRUNC(p.CREATION_TIME) = TRUNC(SYSDATE) OR TRUNC(p.MODIFIED_TIME) = TRUNC(SYSDATE); COMMIT; END;