2010-12-28 2 views
0
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, и это все. Я знаю, что это простой цикл, но мне нужно его получить, поэтому я перехожу к более сложным проблемам. Спасибо заранее ...простой вопрос о цикле

ответ

1

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

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

+0

Я использую Navicat Premium, и MySQL 5.1.39-журнал. Я попытался вставить/обновить 99 других запросов в таблицу без везения. Как я могу захватить эти остальные 99 запросов? – Chad

+0

Я не знаком с Navicat, поэтому я не знаю, как помочь вам увидеть все результирующие наборы, создаваемые процедурой. Однако: если вы запускаете несколько запросов INSERT из своей процедуры, все они должны выполняться успешно. – TehShrike

+0

Это сработало, спасибо за помощь – Chad

1

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

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); 
+0

Я немного изменил это (вставить в таблицу), и это сработало! Спасибо за помощь. – Chad

Смежные вопросы