Как исправить MySQL курсор обновляет дубликаты записей при использовании оператора подготовки?
Ниже приведена моя процедура обновления столбца scene_result на основе результата запроса, доступ к которому осуществляется с помощью курсора.
DROP PROCEDURE IF EXISTS USP_Unit_Test ;
CREATE PROCEDURE `USP_Unit_Test`(IN scenario_id varchar(100))
BEGIN
DECLARE v_finished INTEGER DEFAULT 0 ;
DECLARE v_scn varchar(1024) DEFAULT "" ;
-- declare cursor for scenario queries
DECLARE db_cursor CURSOR FOR
SELECT distinct `Query` FROM UNIT_TEST_UI.Scenarios ;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET v_finished = 1 ;
OPEN db_cursor;
get_db: LOOP
FETCH db_cursor INTO v_scn ;
IF v_finished = 1 THEN
LEAVE get_db;
END IF;
-- create temporary table for result set
drop table if exists temp_table ;
create temporary table temp_table
(id int(11),
scenario_name varchar(1024),
scenario_query varchar(1024),
scenario_result int(11)
) ;
insert into temp_table (id,scenario_name,scenario_query)
select id,Scenario_name,Query from UNIT_TEST_UI.Scenarios ;
-- exexute the query and update the result
SET @u1 = CONCAT('update temp_table tt join UNIT_TEST_UI.Scenarios s on s.Scenario_name=tt.scenario_name set tt.scenario_result=(',v_scn,');') ;
PREPARE stmt FROM @u1;
EXECUTE stmt;
DEALLOCATE PREPARE stmt ;
END LOOP get_db;
CLOSE db_cursor;
case
when scenario_id='All' then
select * from temp_table ;
when (scenario_id in (select id from UNIT_TEST_UI.Scenarios)) then
select * from temp_table where id=scenario_id ;
ELSE
SELECT 'Invalid Choice';
END CASE;
END;
После выполнения действие Обновить произошло так, как первый результат первого запроса был применен ко всем другим результатам и обновил то же самое первое значение. В соответствии с требованием scene_result должен быть результатом связанного запроса.
Я знаю, что мне не хватает настройки динамического запроса. Может ли кто-нибудь, где я могу вынуть лаг?