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, adgr.PK_MEMBER, 32 AS PICK_TYPE, adgc.PK_ID AS PK_BASE_CONFIG, adgr.PK_PRODUCT AS PK_DATA_ID, adgc.SPECS_NAME AS SPECS_NAME, adgc.SPECS_NAME_ID AS SPECS_NAME_ID, adgr.QUANTITY AS USABLE_QUANTITY, bp.COVER AS PICK_COVER, 0 AS IS_FREE_MAIL, 0 AS DEL_FLAG, adgr.QUANTITY AS BASE_QUANTITY, adgr.PK_BASE_ID AS PK_BASE_ID, SYSDATE AS CREATION_TIME, 100000000 AS PK_CREATOR, 1 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 BD_PRODUCT bp ON adgr.PK_PRODUCT = bp.PK_ID LEFT JOIN BD_PRODUCT_EXTEND bpe ON bp.PK_ID = bpe.PK_PRODUCT WHERE TRUNC(adgr.CREATION_TIME) = TRUNC(SYSDATE) - 7 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 (TRUNC(CREATION_TIME) = TRUNC(SYSDATE) - 7 OR SYNC_STATUS = 2); EXCEPTION WHEN OTHERS THEN v_error_count := SQL % ROWCOUNT; UPDATE AC_DECLARATION_GIFT_RECORD SET SYNC_STATUS = 2 WHERE (TRUNC(CREATION_TIME) = TRUNC(SYSDATE) - 7 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;