gpt4 book ai didi

MySQL 内部游标只执行一次

转载 作者:行者123 更新时间:2023-11-30 22:07:05 25 4
gpt4 key购买 nike

DELIMITER $$

CREATE PROCEDURE `remove_schedule_duplicate` ()
BEGIN
BLOCK1 : BEGIN

DECLARE finished INTEGER DEFAULT 0;
DECLARE schedule_id CHAR(36);
DECLARE gamePk INTEGER;
DECLARE keep_entry TINYINT(1);
DECLARE scheduleDuplicate CURSOR FOR SELECT game_pk FROM schedule where is_active = 1 group by game_pk,home_team_id,away_team_id,venue_id having count(game_pk) > 1 limit 2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;

OPEN scheduleDuplicate;

get_schedule_duplicate: LOOP

FETCH scheduleDuplicate INTO gamePk;

IF finished = 1 THEN
LEAVE get_schedule_duplicate;
END IF;

**BLOCK2 : BEGIN

DECLARE block_finished INTEGER DEFAULT 0;
DECLARE blockDuplicate CURSOR FOR SELECT id FROM schedule where game_pk = gamePk and is_active = 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET block_finished = 1;

OPEN blockDuplicate;

block_schedule_duplicate: LOOP

FETCH blockDuplicate INTO schedule_id;

IF block_finished = 1 THEN
LEAVE block_schedule_duplicate;
END IF;

IF keep_entry = 0 THEN
UPDATE schedule set is_active = 0 where id = schedule_id;
END IF;

END LOOP block_schedule_duplicate;

CLOSE blockDuplicate;

END BLOCK2;**

END LOOP get_schedule_duplicate;

CLOSE scheduleDuplicate;

END BLOCK1;

END

$$

问题是 Innerloop 第一次执行良好之后 block_finished 总是 1 所以。它总是退出内部 block 。

如何解决这个问题。我做什么 ?有人帮我解决了这个问题。

最佳答案

I have Changed My Stored procedure like this:

DELIMITER $$
CREATE PROCEDURE `remove_schedule_duplicate`()
BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE schedule_id,temp CHAR(36) DEFAULT NULL;
DECLARE gamePk INTEGER;
DECLARE keep_entry TINYINT(1);
DECLARE scheduleDuplicate CURSOR FOR SELECT game_pk,id FROM schedule where game_pk in (SELECT game_pk FROM schedule where is_active = 1 group by game_pk,home_team_id,away_team_id,venue_id having count(game_pk) > 1) and is_active = 1 order by game_pk;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;

OPEN scheduleDuplicate;

get_schedule_duplicate: LOOP

FETCH scheduleDuplicate INTO gamePk,schedule_id;

IF finished = 1 THEN
LEAVE get_schedule_duplicate;
END IF;

IF ((temp IS NULL) AND (gamePk IS NOT NULL)) OR ((temp IS NOT NULL) AND (temp <> gamePk)) THEN
SET temp = gamePk;
SET keep_entry = 1;
#ELSE IF temp IS NOT NULL AND temp = gamePk THEN
ELSE
SET keep_entry = 0;
END IF;

IF keep_entry = 0 THEN
UPDATE schedule set is_active = 0 where id = schedule_id;
END IF;

END LOOP get_schedule_duplicate;

CLOSE scheduleDuplicate;

END$$
DELIMITER ;

关于MySQL 内部游标只执行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41313519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com