Я пишу MySQL хранимую процедуру в первый раз, и я столкнулся с проблемой - я думаю, с кодом обработчика. В принципе, я хочу, чтобы этот код обновлял все строки в таблице pps_users
, но по какой-то причине я ударяю «законченное условие» для обработчика после того, как выбраны только две строки.Проблемы с хранимой процедурой MYSQL
Я пробовал то же самое с синтаксисом REPEAT и получил тот же результат. Если я просто запускаю запрос курсора, я правильно получаю 10 000 записей, которые я ожидаю, но когда я запускаю все, как есть, я нажимаю готовый код только после 1 или 2 записей.
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `changeNFLFavTeams`()
BEGIN
DECLARE favNFLTeam varchar(100) DEFAULT "";
DECLARE favNCAATeam varchar(100) DEFAULT "";
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE user_id bigint(20);
DECLARE fullNameOfTeam varchar(100) DEFAULT "";
DECLARE update_favs CURSOR FOR select id, favorite_nfl_team from pps_users WHERE favorite_nfl_team is not null;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;
OPEN update_favs;
updaterecord: LOOP
FETCH update_favs INTO user_id, favNFLTeam;
select user_id, favNFLTeam as "Test";
if v_finished = 1
then
select "finished" as "finished";
LEAVE updaterecord;
end if;
select full_name into fullNameOfTeam
from teams t
inner join display_names dt on dt.entity_id = t.id
and dt.entity_type = 'teams'
and dt.first_name = favNFLTeam
and team_key like 'l.nfl.com%' LIMIT 1;
select user_id, fullNameOfTeam AS "BeforeUpdate";
IF fullNameOfTeam != ''
THEN
-- here for whatever_transformation_may_be_desired
-- Find the Full name for the record they chose
UPDATE pps_users p
SET favorite_nfl_team = fullNameOfTeam
WHERE user_id = p.id;
ELSE
SELECT 'A' AS 'A'; -- no op
END IF;
end loop updaterecord;
CLOSE update_favs;
END
Возможно ли, что на некоторой итерации LOOP возникает ошибка? – wchiquito
Я не вижу ошибок в выходе, когда я запускаю его - похоже, что он работает нормально. – skaz
Если вы обрабатываете меньшее количество записей, проблема сохраняется? – wchiquito