p_data_migration_wcmmetatable.sql 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. DROP PROCEDURE IF EXISTS p_data_migration_wcmmetatable;
  2. DELIMITER $$
  3. CREATE PROCEDURE p_data_migration_wcmmetatable(IN prevTableInfoId VARCHAR(100),
  4. IN prevDocId BIGINT(20),
  5. IN docIdOffset BIGINT(20),
  6. IN channelIdOffset BIGINT(20))
  7. BEGIN
  8. DECLARE isover INT DEFAULT 0;
  9. DECLARE f_TABLEINFOID INT DEFAULT 0;
  10. DECLARE f_TABLENAME VARCHAR(200) DEFAULT NULL;
  11. DECLARE cur CURSOR FOR
  12. SELECT
  13. TABLEINFOID,
  14. TABLENAME
  15. FROM v_wcm.xwcmtableinfo
  16. ORDER BY TABLEINFOID asc;
  17. DECLARE CONTINUE HANDLER FOR NOT FOUND SET isover = 1;
  18. OPEN cur;
  19. FETCH cur INTO
  20. f_TABLEINFOID,
  21. f_TABLENAME
  22. ;
  23. WHILE isover= 0 DO
  24. # 断点续传
  25. IF (f_TABLEINFOID > prevTableInfoId)
  26. THEN
  27. # 由于元数据表是动态生成的,执行存储过程前,需要提前将所有元数据表(结构+数据)直接复制至海云
  28. # 迁移后的元数据,其元数据ID不能和其他元数据表中的ID发生冲突,需要更改,因此有了以下SQL
  29. SET @sql = concat('UPDATE trs_hycloud_iip.', f_TABLENAME,
  30. ' SET MetaDataId = MetaDataId + ', docIdOffset,
  31. ', ChannelId = ChannelId + ', channelIdOffset,
  32. ' WHERE MetaDataId > ', prevDocId);
  33. prepare stmt from @sql;
  34. EXECUTE stmt;
  35. deallocate prepare stmt;
  36. SELECT CONCAT('成功升级 wcmmetatable', f_TABLENAME, ' 的MetaDataId和ChannelId') ;
  37. END IF ;
  38. FETCH cur INTO
  39. f_TABLEINFOID,
  40. f_TABLENAME
  41. ;
  42. END WHILE;
  43. CLOSE cur;
  44. SELECT concat('升级 wcmmetatable', f_TABLENAME, ' 完毕');
  45. END $$
  46. DELIMITER ;