Per esempio di loop in MySQL

In MySQL, ho questa stored procedure con un ciclo For in esso:

DELIMITER $$ CREATE PROCEDURE ABC() BEGIN DECLARE a INT Default 0 ; simple_loop: LOOP SET a=a+1; select a; IF a=5 THEN LEAVE simple_loop; END IF; END LOOP simple_loop; END $$ 

Stampa sempre 1 . Qual è la syntax corretta per un ciclo MySQL?

 drop table if exists foo; create table foo ( id int unsigned not null auto_increment primary key, val smallint unsigned not null default 0 ) engine=innodb; drop procedure if exists load_foo_test_data; delimiter # create procedure load_foo_test_data() begin declare v_max int unsigned default 1000; declare v_counter int unsigned default 0; truncate table foo; start transaction; while v_counter < v_max do insert into foo (val) values ( floor(0 + (rand() * 65535)) ); set v_counter=v_counter+1; end while; commit; end # delimiter ; call load_foo_test_data(); select * from foo order by id; 

Mentre esempio di syntax del ciclo in MySQL:

 delimiter // CREATE procedure yourdatabase.while_example() wholeblock:BEGIN declare str VARCHAR(255) default ''; declare x INT default 0; SET x = 1; WHILE x < = 5 DO SET str = CONCAT(str,x,','); SET x = x + 1; END WHILE; select str; END// 

Quale stampa:

 mysql> call while_example(); +------------+ | str | +------------+ | 1,2,3,4,5, | +------------+ 

Esempio di syntax del loop REPEAT in MySQL:

 delimiter // CREATE procedure yourdb.repeat_loop_example() wholeblock:BEGIN DECLARE x INT; DECLARE str VARCHAR(255); SET x = 5; SET str = ''; REPEAT SET str = CONCAT(str,x,','); SET x = x - 1; UNTIL x < = 0 END REPEAT; SELECT str; END// 

Quale stampa:

 mysql> call repeat_loop_example(); +------------+ | str | +------------+ | 5,4,3,2,1, | +------------+ 

Esempio di syntax del ciclo in MySQL:

 delimiter // CREATE procedure yourdatabase.for_loop_example() wholeblock:BEGIN DECLARE x INT; DECLARE str VARCHAR(255); SET x = -5; SET str = ''; loop_label: LOOP IF x > 0 THEN LEAVE loop_label; END IF; SET str = CONCAT(str,x,','); SET x = x + 1; ITERATE loop_label; END LOOP; SELECT str; END// 

Quale stampa:

 mysql> call for_loop_example(); +-------------------+ | str | +-------------------+ | -5,-4,-3,-2,-1,0, | +-------------------+ 1 row in set (0.00 sec) 

Fai il tutorial: http://www.mysqltutorial.org/stored-procedures-loop.aspx

Se ti sorprenderò a spingere questo tipo di costrutti MyS-Loop per la produzione in loop, ti sparerò con il lanciamissili della schiuma. Puoi usare una chiave a tubo per sbattere un chiodo, ma farlo ti fa sembrare sciocco.

Supponi di avere una tabella con il nome “table1”. Contiene una colonna “col1” con tipo varchar. Query alla tabella della cassa è data sotto

 CREATE TABLE `table1` ( `col1` VARCHAR(50) NULL DEFAULT NULL ) 

Ora se si desidera inserire il numero da 1 a 50 in quella tabella, utilizzare la seguente stored procedure

 DELIMITER $$ CREATE PROCEDURE ABC() BEGIN DECLARE a INT Default 1 ; simple_loop: LOOP insert into table1 values(a); SET a=a+1; IF a=51 THEN LEAVE simple_loop; END IF; END LOOP simple_loop; END $$ 

Per chiamare quella stored procedure utilizzare

 CALL `ABC`()