mysql存储过程(清洗因业务变更遗留下来的无关数据)

本文介绍了一个SQL存储过程的设计与实现,用于解决同一公司下客户数据重复录入的问题。通过定义游标和预处理语句,实现了对重复客户记录的自动标记,确保每个客户仅由一名用户创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

旧业务需求:一个客户可以被同一个公司下的不同用户多次新建。

新业务需求:一个客户可以被同一个公司下的用户新建一次。

清洗旧业务遗留下来的数据,清洗规则:谁先创建客户谁保留,后面创建的统统标记为无用状态。

DELIMITER $$
CREATE PROCEDURE deletechongfu()
BEGIN
DECLARE org_id INT(11);
DECLARE count_num INT;
DECLARE customer_code VARCHAR(32);
DECLARE customer_id VARCHAR(255);
-- 遍历数据结束标志
DECLARE done INT DEFAULT FALSE;
DECLARE customerCursor CURSOR FOR SELECT t1.id,t1.code,t1.org_id,COUNT(*) AS COUNT FROM (SELECT t.id,t.org_id,t.name,t.code,tc.tuser_id,tc.create_time FROM credit.hd_tuser_customer tc INNER JOIN (SELECT t.code,t.name,t.org_id,t.id FROM credit.hd_customer_user t WHERE t.status = '1') t ON tc.customer_id = t.id WHERE tc.status = '1') t1 GROUP BY t1.code,t1.org_id HAVING COUNT >1;
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN customerCursor;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH customerCursor INTO customer_id,customer_code,org_id,count_num;
SET @count_total = 0;
SELECT customer_id INTO @customer_id;
SELECT (count_num-1) INTO @count_total;
PREPARE s1 FROM 'update credit.hd_tuser_customer set status = "0" where (customer_id,tuser_id) in (SELECT tt.customer_id,tt.tuser_id FROM (select t.customer_id,t.tuser_id from credit.hd_tuser_customer t where t.customer_id = ? and t.status = "1" order by t.create_time asc limit 0,?) tt)';
EXECUTE s1 USING @customer_id,@count_total;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
END LOOP;
-- 关闭游标
CLOSE customerCursor;
END$$
DELIMITER ;

 

在写存储过程的途中,遇到以下问题:

1:EXECUTE s1 USING @customer_id,@count_total 这里只能是使用用户变量

2:在编写预处理语句的时候,用问号?来标记占位符。要谨记该占位符问号不能加引号或双引号,即使与字符串连接

3:子查询不支持limit条件限制,解决方法是在该处子查询外面再包一层子查询。

转载于:https://my.oschina.net/u/2381372/blog/1836250

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值