将saas库信息同步到中心库

在公司借调到另一个saas产品组,发现中心库和saas库中数据设计重复,且数据内容不一致,bug上来了。此时,开始同步saas库中的内容到中心库吧。

数据库使用的mysql,只有写存储过程了。

同步内容:商户的Logo信息。

同步逻辑:对每个saas库生成一条update语句,然后复制出来,在中心库中执行。


delimiter $$
drop PROCEDURE if EXISTS SyncStoreLogo;
CREATE PROCEDURE SyncStoreLogo()
BEGIN
DECLARE t_sql text; --更新中心库的sql语句很长,使用text类型
DECLARE ts VARCHAR(100);
DECLARE SLogo VARCHAR(100);
DECLARE SCode VARCHAR(100);
DECLARE SCount int;
DECLARE l_sql VARCHAR(4000);

--根据saas库名的规则,找到所有相关库,使用游标逐个库生成更新语句
declare done int default false;
DECLARE tcur CURSOR for SELECT table_schema from information_schema.`TABLES` where table_name ='e_store' and table_schema like 'enterprisedb%';

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
SELECT '' into t_sql;
open tcur;
read_loop:loop
FETCH tcur into ts;
--因为saas库中的数据存在历史错误,如果商户表中没有数据,就不更新
set l_sql=CONCAT('select count(1) into @SCount from ',ts,'.e_store;');
SET @sql=l_sql;
PREPARE s1 FROM @sql;
EXECUTE s1;
DEALLOCATE PREPARE s1;

if @SCount>0 then
SET l_sql=CONCAT('select Logo,Code into @SLogo,@SCode from ',ts,'.e_store;');--要更新的Logo字段值
SET @sql=l_sql;

PREPARE s1 FROM @sql;
EXECUTE s1;
DEALLOCATE PREPARE s1;
--生成更新语句
if @SLogo is not null then
SELECT CONCAT(t_sql,"update c_store set Logo=\'",@SLogo,"\' where  (Logo='' or Logo is null) and Code=",@SCode,';') into t_sql;
end if;
end if;

IF done THEN
leave read_loop;
END IF;
END LOOP;

CLOSE tcur;

SELECT t_sql;
END$$


call SyncStoreLogo();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值