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;