Как исправить 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 должен быть результатом связанного запроса.

Я знаю, что мне не хватает настройки динамического запроса. Может ли кто-нибудь, где я могу вынуть лаг?

0 ответов

Другие вопросы по тегам