123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- DROP PROCEDURE IF EXISTS sp_data_migration_wcmmetatable;
- DELIMITER $$
- CREATE PROCEDURE sp_data_migration_wcmmetatable(IN citySuffix VARCHAR(20),
- IN prevTableInfoId BIGINT(20),
- IN prevDocId BIGINT(20),
- IN docIdOffset BIGINT(20),
- IN channelIdOffset BIGINT(20))
- BEGIN
- DECLARE isover INT DEFAULT 0;
- DECLARE f_TABLEINFOID INT DEFAULT 0;
- DECLARE f_TABLENAME VARCHAR(200) DEFAULT NULL;
- DECLARE cur CURSOR FOR
- SELECT
- TABLEINFOID,
- TABLENAME
- FROM xwcmtableinfo
- ORDER BY TABLEINFOID asc;
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET isover = 1;
- OPEN cur;
- FETCH cur INTO
- f_TABLEINFOID,
- f_TABLENAME
- ;
- WHILE isover= 0 DO
- # 断点续传
- IF (f_TABLEINFOID > prevTableInfoId)
- THEN
- SET @metaTableExists = (SELECT count(1) from information_schema.tables where table_schema = 'trs_hycloud_iip' and table_name = concat('wcmmetatable', f_TABLENAME, citySuffix) );
- select concat('开始更新 :', @metaTableExists, '====:','wcmmetatable', f_TABLENAME, citySuffix) info;
- IF (@metaTableExists > 0)
- THEN
- select concat('开始更新 ', 'wcmmetatable', f_TABLENAME, citySuffix, '.MetaDataId & ChannelId') info;
- # 由于元数据表是动态生成的,执行存储过程前,需要提前将所有元数据表(结构+数据)直接复制至海云
- # 迁移后的元数据,其元数据ID不能和其他元数据表中的ID发生冲突,需要更改,因此有了以下SQL
- SET @update_sql = concat('UPDATE trs_hycloud_iip.wcmmetatable', f_TABLENAME, citySuffix,
- ' SET MetaDataId = MetaDataId + ', docIdOffset,
- ', ChannelId = ChannelId + ', channelIdOffset,
- ' WHERE MetaDataId > ', prevDocId);
- select concat('更新元数据sql: ', @update_sql ) info;
- prepare stmt from @update_sql;
- EXECUTE stmt;
- deallocate prepare stmt;
- if (prevTableInfoId = 0)
- then
- #设置ID的最大值
- set @max_sql = concat('SELECT ifnull(max(wcmmetatable', f_TABLENAME, citySuffix, 'ID), 0)into @meta_data_id from trs_hycloud_iip.wcmmetatable', f_TABLENAME, citySuffix);
- prepare stmt from @max_sql;
- EXECUTE stmt;
- deallocate prepare stmt;
- set @id_sql = concat('INSERT INTO trs_hycloud_iip.wcmid VALUES (','\'','wcmmetatable',
- f_TABLENAME, citySuffix, '\'',', ', @meta_data_id + 1,', 1, ','\'','wcmmetatable',f_TABLENAME, citySuffix,'ID','\'',');');
- select concat('插入wcmid元数据sql: ', @id_sql ) info;
- prepare stmt from @id_sql;
- EXECUTE stmt;
- deallocate prepare stmt;
- else
- #设置ID的最大值
- set @max_sql = concat('SELECT max(wcmmetatable', f_TABLENAME, citySuffix, 'ID) into @meta_data_id from trs_hycloud_iip.wcmmetatable', f_TABLENAME, citySuffix);
- prepare stmt from @max_sql;
- EXECUTE stmt;
- deallocate prepare stmt;
- set @id_sql = concat('UPDATE trs_hycloud_iip.wcmid SET NEXTID = ', @meta_data_id + 1,' where TABLENAME = ','\'','wcmmetatable',
- f_TABLENAME, citySuffix, '\'');
- prepare stmt from @id_sql;
- EXECUTE stmt;
- deallocate prepare stmt;
- end if ;
- SET @log_sql = build_migration_log_sql(concat('wcmmetatable', f_TABLENAME, citySuffix), @meta_data_id, now());
- prepare stmt from @log_sql;
- EXECUTE stmt;
- deallocate prepare stmt;
- select concat('完成更新 ', 'wcmmetatable', f_TABLENAME, citySuffix, '.MetaDataId & ChannelId') info;
- END IF ;
- END IF ;
- FETCH cur INTO
- f_TABLEINFOID,
- f_TABLENAME
- ;
- END WHILE;
- CLOSE cur;
- select CONCAT('sp_data_migration_wcmmetatable 执行完成') info;
- END $$
- DELIMITER ;
|