zoukankan      html  css  js  c++  java
  • 使用Mysql 存储过程和游标进行同步数据

    
    
    -- UpdateUserData是同步数据需要具体执行的步骤,AsyncUserData是控制UpdateUserData的条件。

    DROP PROCEDURE IF EXISTS UpdateUserData; DROP PROCEDURE IF EXISTS AsyncUserData;
    DELIMITER // CREATE PROCEDURE `UpdateUserData`(IN id int(11)) BEGIN DECLARE classidstr VARCHAR(500); DECLARE gradeidstr VARCHAR(500); DECLARE stageidstr VARCHAR(500); DECLARE childidstr VARCHAR(500); select CONCAT("[", GROUP_CONCAT( """,tb_child.class_id ,"""), "]") into classidstr from tb_child where patriarch_id=id; select CONCAT("[", GROUP_CONCAT(tb_child.grade_id), "]") into gradeidstr from tb_child where patriarch_id=id; select CONCAT("[", GROUP_CONCAT(tb_child.stage_id), "]") into stageidstr from tb_child where patriarch_id=id; select CONCAT("[", GROUP_CONCAT(tb_child.child_id), "]") into childidstr from tb_child where patriarch_id=id; IF childidstr is NULL THEN update tb_patriarch set class_ids='' , grade_ids ='' , stage_ids='' , child_ids='' where patriarch_id= id; ELSE update tb_patriarch set class_ids=classidstr , grade_ids =gradeidstr , stage_ids=stageidstr , child_ids=childidstr where patriarch_id= id; END IF; END // DELIMITER ; call UpdateUserData(4594); DELIMITER // CREATE PROCEDURE `AsyncUserData`() BEGIN DECLARE id int(11); -- 定义遍历数据结束标志 DECLARE done BOOLEAN DEFAULT 0; DECLARE curid CURSOR FOR select patriarch_id as id from tb_patriarch where child_ids='[0]' ; -- 当REPEAT由于没有更多的行供循环而不能继续时出现这个条件,将done设置为1,此时REPEAT终止 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; OPEN curid; read_loop:LOOP FETCH curid into id; IF done THEN LEAVE read_loop; END IF; call UpdateUserData(id); END LOOP; CLOSE curid; END // call AsyncUserData();

     
  • 相关阅读:
    如何成为伟大的程序员
    程序员如何增加收入
    一个阿里巴巴码农的六年回眸
    效仿盖茨:PPstream创始人的心路历程
    程序员的工作环境与效率
    软件级负载均衡器(LVS/HAProxy/Nginx)的特点简介和对比
    技术人员创业后就不再适合继续编码了
    互联网行业持续交付的经验
    11 款用于优化、分析源代码的Java工具
    常用 Java 静态代码分析工具的分析与比较
  • 原文地址:https://www.cnblogs.com/chongyao/p/12651447.html
Copyright © 2011-2022 走看看