3_sp_data_migration_wcmmetatable.sql 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. DROP PROCEDURE IF EXISTS sp_data_migration_wcmmetatable;
  2. DELIMITER $$
  3. CREATE PROCEDURE sp_data_migration_wcmmetatable(IN citySuffix VARCHAR(20),
  4. IN prevTableInfoId VARCHAR(100),
  5. IN prevDocId BIGINT(20),
  6. IN docIdOffset BIGINT(20),
  7. IN channelIdOffset BIGINT(20))
  8. BEGIN
  9. DECLARE isover INT DEFAULT 0;
  10. DECLARE f_TABLEINFOID INT DEFAULT 0;
  11. DECLARE f_TABLENAME VARCHAR(200) DEFAULT NULL;
  12. DECLARE cur CURSOR FOR
  13. SELECT
  14. TABLEINFOID,
  15. TABLENAME
  16. FROM xwcmtableinfo
  17. ORDER BY TABLEINFOID asc;
  18. DECLARE CONTINUE HANDLER FOR NOT FOUND SET isover = 1;
  19. OPEN cur;
  20. FETCH cur INTO
  21. f_TABLEINFOID,
  22. f_TABLENAME
  23. ;
  24. WHILE isover= 0 DO
  25. # 断点续传
  26. IF (f_TABLEINFOID > prevTableInfoId)
  27. THEN
  28. SET @metaTableExists = (SELECT count(1) from information_schema.tables where table_schema = 'trs_hycloud_iip' and table_name = concat('wcmmetatable', f_TABLENAME, citySuffix) );
  29. IF (@metaTableExists > 0)
  30. THEN
  31. select concat('开始更新 ', 'wcmmetatable', f_TABLENAME, citySuffix, '.MetaDataId & ChannelId') info;
  32. set @del_sql = concat('delete from meta_data');
  33. prepare stmt from @del_sql;
  34. EXECUTE stmt;
  35. deallocate prepare stmt;
  36. SET @doc_sql = concat('INSERT INTO meta_data(metadat_id, channel_id) SELECT MetaDataId,ChannelId FROM trs_hycloud_iip.wcmmetatable',
  37. f_TABLENAME, citySuffix, ' WHERE MetaDataId > ', prevDocId);
  38. prepare stmt from @doc_sql;
  39. EXECUTE stmt;
  40. deallocate prepare stmt;
  41. call sp_data_migration_wcmmetablexx(concat('wcmmetatable', f_TABLENAME, citySuffix), prevDocId, docIdOffset, channelIdOffset);
  42. if prevTableInfoId = 0
  43. then
  44. #更新当前表的ID字段名称
  45. set @id_field_sql = concat('ALTER TABLE trs_hycloud_iip.wcmmetatable', f_TABLENAME, citySuffix,
  46. ' CHANGE COLUMN `WCMMetaTable',f_TABLENAME,
  47. 'ID` `wcmmetatable',f_TABLENAME, citySuffix,
  48. 'ID` int(11) NOT NULL;');
  49. select concat('更新ID字段元数据sql: ', @id_field_sql ) info;
  50. prepare stmt from @id_field_sql;
  51. EXECUTE stmt;
  52. deallocate prepare stmt;
  53. #设置ID的最大值
  54. set @max_sql = concat('SELECT max(wcmmetatable', f_TABLENAME, citySuffix, 'ID) into @meta_data_id from trs_hycloud_iip.wcmmetatable', f_TABLENAME, citySuffix);
  55. prepare stmt from @max_sql;
  56. EXECUTE stmt;
  57. deallocate prepare stmt;
  58. set @id_sql = concat('INSERT INTO trs_hycloud_iip.wcmid VALUES (','\'','wcmmetatable',
  59. f_TABLENAME, citySuffix, '\'',', ', @meta_data_id + 1,', 1, ','\'','wcmmetatable',f_TABLENAME, citySuffix,'ID','\'',');');
  60. select concat('插入wcmid元数据sql: ', @id_sql ) info;
  61. prepare stmt from @id_sql;
  62. EXECUTE stmt;
  63. deallocate prepare stmt;
  64. else
  65. #设置ID的最大值
  66. set @max_sql = concat('SELECT max(wcmmetatable', f_TABLENAME, citySuffix, 'ID) into @meta_data_id from trs_hycloud_iip.wcmmetatable', f_TABLENAME, citySuffix);
  67. prepare stmt from @max_sql;
  68. EXECUTE stmt;
  69. deallocate prepare stmt;
  70. set @id_sql = concat('UPDATE trs_hycloud_iip.wcmid SET NEXTID = ', @meta_data_id + 1,' where TABLENAME = ','\'','wcmmetatable',
  71. f_TABLENAME, citySuffix, '\'');
  72. prepare stmt from @id_sql;
  73. EXECUTE stmt;
  74. deallocate prepare stmt;
  75. end if ;
  76. select concat('完成更新 ', 'wcmmetatable', f_TABLENAME, citySuffix, '.MetaDataId & ChannelId') info;
  77. END IF ;
  78. END IF ;
  79. FETCH cur INTO
  80. f_TABLEINFOID,
  81. f_TABLENAME
  82. ;
  83. END WHILE;
  84. CLOSE cur;
  85. END $$
  86. DELIMITER ;