千万级数据迁移版本3
PROCEDURE MIGRATE_LIVE_EVENT AS
CURSOR LIVE_EVENT_RECORD
IS SELECT/*+parallel(8)*/ E.*,A.SCHEDULE_ID FROM DYBF_RB_LIVE_EVENT E
LEFT JOIN (SELECT S.MATCH_ID,S.SCHEDULE_ID,M.THIRD_ID FROM DYBF_SCHEDULE S
LEFT JOIN THIRD_MATCH M ON S.MATCH_ID = M.ID
WHERE S.MATCH_ID IS NOT NULL) A ON A.THIRD_ID = E.GAME_ID
WHERE A.SCHEDULE_ID IS NOT NULL;
ROW_LIVE_EVENT LIVE_EVENT_RECORD%ROWTYPE;
NEW_LIVE_EVENT_ID BF_RB_LIVE_EVENT.ID%TYPE;
S_D TIMESTAMP;
E_D TIMESTAMP;
BEGIN
--DBMS_OUTPUT.PUT_LINE(SYSTIMESTAMP || ' 开始迁移DYBF_DETAIL_RESULT表中球探赛事结果数据...');
S_D := SYSTIMESTAMP;
OPEN LIVE_EVENT_RECORD;
LOOP
FETCH LIVE_EVENT_RECORD INTO ROW_LIVE_EVENT;
EXIT WHEN LIVE_EVENT_RECORD%NOTFOUND;
SELECT SEQ_BF_RB_COMM_ID.NEXTVAL INTO NEW_LIVE_EVENT_ID FROM DUAL;
INSERT /*+APPEND*/ INTO BF_RB_LIVE_EVENT
(
ID,
GAME_ID,
EVENT_NUM,
RB_CODE_ID,
CUR_TIME,
RE_EVENT_NUM,
ADD_INFO,
STATE
)
VALUES
(
NEW_LIVE_EVENT_ID,
ROW_LIVE_EVENT.SCHEDULE_ID,
ROW_LIVE_EVENT.EVENT_NUM,
ROW_LIVE_EVENT.RB_CODE_ID,
ROW_LIVE_EVENT.CUR_TIME,
ROW_LIVE_EVENT.RE_EVENT_NUM,
ROW_LIVE_EVENT.ADD_INFO,
ROW_LIVE_EVENT.STATE
);
IF MOD(LIVE_EVENT_RECORD%ROWCOUNT,FLAG) = 0 THEN
COMMIT;
END IF;
END LOOP;
COMMIT;
--DBMS_OUTPUT.PUT_LINE (SYSTIMESTAMP || ' 共完成处理的数据量(DYBF_RB_LIVE_EVENT):' || LIVE_EVENT_RECORD%ROWCOUNT);
E_D := SYSTIMESTAMP;
MIGRATE_EXECUTE_TIME('MIGRATE_BATCH_LIVE_EVENT',S_D,E_D,LIVE_EVENT_RECORD%ROWCOUNT);
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
INSERT_ERR_INFO(SQLERRM,'MIGRATE_QT_RESULT_DETAIL',ROW_LIVE_EVENT.ID);
DBMS_OUTPUT.PUT_LINE
(
'当前处理失败的数据:[赛事事件编号=' || ROW_LIVE_EVENT.ID || ' ]' || ' [异常信息:'
|| SQLERRM || ']'
);
CLOSE LIVE_EVENT_RECORD;
END MIGRATE_LIVE_EVENT;