昨天我注意到一件非常有趣(也是出乎意料)的事情。我被赋予了一项任务(在生产环境中),通过获取 dummytable 中存在的所有值来更新 TableA 的三列(由于一些明显的原因,我正在更改表和列名)。两个表的主键都是 A 列。我知道这个任务非常简单,可以通过多种方式完成,但我选择为此编写一个存储过程(如下所示)。
当存储过程执行完毕后,我们注意到 B、C 和 statusCode 列具有相同的值(即数千条记录在这三列中具有相同的值)。有人可以告诉我出了什么问题吗?
1)这个存储过程有什么问题(或缺失)?(虚拟表也有数千条记录) 2)除了创建存储过程之外,执行此任务的最佳方法是什么?
PS:我使用 MySQL 工作台在生产环境中创建(也执行了)这个存储过程,并且在执行过程中出现异常,指出“与 MySQL 服务器的连接丢失”,但我猜是因为我在远程机器然后在执行过程时服务器上没有中断。
这是我的存储过程。
DELIMITER $$
CREATE DEFINER=`ABC`@`%` PROCEDURE `RetrieveExtractionData`()
BEGIN
DECLARE claimlisttraversed BOOLEAN DEFAULT FALSE;
DECLARE a VARCHAR(20);
DECLARE b INTEGER;
DECLARE c INTEGER;
DECLARE claimlist CURSOR FOR SELECT
`dummytable`.`A`,
`dummytable`.`B`,
`dummytable`.`C`
FROM `ABC`.`dummytable`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET claimlisttraversed = TRUE;
OPEN claimlist;
claimlistloop: LOOP
FETCH claimlist INTO a, b, c;
IF claimlisttraversed THEN
CLOSE claimlist;
LEAVE claimlistloop;
END IF;
UPDATE `ABC`.`TableA`
SET
`B` = b,
`C` = c,
`statuscode` = 'Sent'
WHERE `A` = a;
END LOOP claimlistloop;
END