Мой запрос должен при циклическом перемещении курсора для таблицы table_a проверять, существует ли значение в table_b. Если значение существует в table_b, вернуть значение в переменную @ yyy.
Когда я запускаю этот сохраненный процесс, я должен получить значение, которое возвращает col2, col3, col1. но возвращает только col2, col3.
В этом запросе, когда я использую into @yyy
, я чувствую, что он работает не так, как нужно. Не уверен, в чем проблема. Не могли бы вы помочь.
Просто удалив into @yyy
, я могу получить правильные результаты, но мне нужно внести дополнительные изменения в переменную @yyy
, поэтому мне нужно сохранить результаты в ней.
Delimiter $$
DROP PROCEDURE IF EXISTS sp_test3;
CREATE PROCEDURE sp_test3()
BEGIN
DECLARE DONE INT DEFAULT 0;
DECLARE col1 varchar(255);
DECLARE curA CURSOR FOR SELECT a1 FROM table_a;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET DONE = 1;
OPEN curA;
SET @SQL_TXT = '';
while done = 0 do
fetch next from CurA into col1;
if done = 0 then
SET @xxx = CONCAT("select b1 into @yyy from table_b where b1 ='",
col1,"'");
PREPARE stmt_name FROM @xxx;
EXECUTE stmt_name;
DEALLOCATE PREPARE stmt_name;
SELECT @yyy;
END IF;
END WHILE;
close curA;
end
$$
создайте сценарии таблицы ниже:
create table table_a(a1 varchar(255));
create table table_b(b1 varchar(255));
insert into table_a values('col2');
insert into table_a values('col3');
insert into table_a values('col5');
insert into table_a values('col1');
insert into table_b values('col2');
insert into table_b values('col3');
insert into table_b values('col4');
insert into table_b values('col1');