простой зацикленный вопрос - PullRequest
0 голосов
/ 29 декабря 2010
CREATE DEFINER = `dba`@`xx.xx.xx.3` PROCEDURE `oninjadb`.`TESTLOOPER`()
LANGUAGE SQL
DETERMINISTIC
NO SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN

DECLARE counter INT default 0;


simple_loop: LOOP
SET counter=counter+1;
select counter;
 IF counter=100 THEN
    leave simple_loop;

END IF;
end loop simple_loop;
END

Хорошо, проблема с простым циклом, скопированная из поиска Google. Единственная проблема заключается в том, что цикл не будет проходить более одного раза, поэтому вывод равен 1 и все. Я знаю, что это простой цикл, но мне нужно его получить, чтобы я перешел к более сложным проблемам. Заранее спасибо ...

Ответы [ 2 ]

1 голос
/ 29 декабря 2010

это может вернуть вас в нужное русло:)

drop procedure if exists test_looper;

delimiter #

create procedure test_looper
(
in p_max int unsigned
)
proc_main:begin

declare v_counter int unsigned default 0;

if p_max is null or p_max <= 0 then
    leave proc_main;
end if;

while v_counter < p_max do
    select v_counter;
    set v_counter=v_counter+1;
end while;

end proc_main#

delimiter ;


call test_looper(10);
1 голос
/ 29 декабря 2010

Ваша процедура фактически выполняет 100 запросов. Запрос first возвращает результат с номером 1. 99 других наборов результатов возвращают правильные числа.

Процедуры могут возвращать несколько результирующих наборов из нескольких запросов. Ваша способность читать эти различные наборы результатов зависит от используемого вами API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...