数据库插入高校批量函数

-- 存储例程

-- 创建存储例程,若存在则不创建,因此使用前要注意是否有重复存储例程
DROP PROCEDURE IF EXISTS `存储例程名称,文章以下都称为sp_test_v6`;
DELIMITER // -- 分隔符
-- taskId 开始主键,span 分组
PROCEDURE `sp_test_v6`(IN taskId INT, IN span INT)
TASK_LABEL:BEGIN

-- 创建变量
DECLARE minId INT;
DECLARE maxId INT;
DECLARE v_relation INT;
DECLARE v_view_id BIGINT;
DECLARE v_view_type INT;  -- 视角类型 0集团视角 1 普通视角 2 单店视角
DECLARE v_area_id BIGINT;
DECLARE v_sys_customer_id BIGINT;
DECLARE v_shop_str MEDIUMTEXT;

SET @sql = '执行语句';

-- 创建临时表
DROP TABLE IF EXISTS tmp_temp;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_temp
(
  id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  view_id BIGINT,
  view_type INT,
  UNIQUE KEY `AK_view_id` (`view_id`)
);

-- 插入表数据,为了执行时获取临时表中的数据
INSERT IGNORE INTO tmp_temp(view_id,view_type,shop_id_str)
-- 从另一张表中获取数据
SELECT CAST(relation_key AS UNSIGNED) AS view_id,relation_flag AS view_type,relation_value AS shop_id_str
FROM `kd_relation`

SET @startId = (taskId - 1) * span + 1; -- 起始值
SET @endId = taskId * span; -- 终止值
-- 插入数据
INSERT IGNORE INTO sp_test_v6 
-- 字段必须在变量上创建
(create_time,update_time,task_id,start_id,end_id,current_id,task_type) VALUES (NOW(),NOW(),taskId,@startId,@endId,@startId,@taskType);
SELECT current_id,end_id INTO minId,maxId FROM sp_test_v6 WHERE task_id = taskId AND task_type = @taskType;
WHILE (minId <= maxId) DO
-- 赋值字段值
        SET v_sys_customer_id = 0;
          SELECT view_id,IFNULL(sys_customer_id,0) INTO v_view_id,v_sys_customer_id FROM kd_view_customer_sg_info WHERE id = minId;
          IF v_sys_customer_id IS NOT NULL AND v_sys_customer_id <> 0  THEN

                  SELECT shop_id_str INTO v_shop_str FROM tmp_view_shop WHERE view_id=v_view_id LIMIT 1;  

                  SET @runsql = REPLACE(REPLACE(@sql,'@SysCustomerId',v_sys_customer_id),'@WhereViewId',v_view_id);
                SET @runsql = REPLACE(@runsql,'AND @WhereInShopId',CONCAT(' AND k.shop_id IN (',v_shop_str,') '));
--                 select @runsql;

                IF v_shop_str<>'0' THEN
                  PREPARE stmt FROM @runsql;
                  EXECUTE stmt;
                  DEALLOCATE PREPARE stmt;
                END IF;
                
          END IF;
        IF minId % 10000 = 0 OR minId = maxId THEN
                  UPDATE sp_test_v6 SET current_id = minId, update_time = NOW() WHERE task_id = taskId AND task_type = @taskType;
          END IF;
          SET minId = minId + 1;
END WHILE;

SELECT '当前任务已完成!' AS message FROM DUAL;
END//
DELIMITER ;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值