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_ID AS SRC_ID, so.PK_CREATOR AS PK_MEMBER, 32 AS PICK_TYPE, adgc.PK_ID AS PK_BASE_CONFIG, adgd.PK_PRODUCT AS PK_DATA_ID, adgd.SPECS_NAME AS SPECS_NAME, adgd.SPECS_NAME_ID AS SPECS_NAME_ID, adgd.QUANTITY AS USABLE_QUANTITY, bp.COVER AS PICK_COVER, 0 AS IS_FREE_MAIL, 0 AS DEL_FLAG, adgd.QUANTITY AS BASE_QUANTITY, adgr.PK_BASE_ID AS PK_BASE_ID, 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 = 0 OR adgr.SYNC_STATUS = 2 ) src ON ( tgt.PICK_TYPE = src.PICK_TYPE AND tgt.PK_BASE_CONFIG = src.PK_BASE_CONFIG 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 ) 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, src.PK_BASE_CONFIG, 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, 100000000, src.PK_COUNTRY ); UPDATE AC_DECLARATION_GIFT_RECORD SET SYNC_STATUS = 1 WHERE SYNC_STATUS = 0 OR SYNC_STATUS = 2; EXCEPTION WHEN OTHERS THEN v_error_count := SQL % ROWCOUNT; UPDATE AC_DECLARATION_GIFT_RECORD SET SYNC_STATUS = 2 WHERE SYNC_STATUS = 0 OR SYNC_STATUS = 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;