Solución:
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;
Ejemplo de sintaxis de bucle while en 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//
Que imprime:
mysql> call while_example();
+------------+
| str |
+------------+
| 1,2,3,4,5, |
+------------+
Ejemplo de sintaxis de ciclo REPEAT en 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//
Que imprime:
mysql> call repeat_loop_example();
+------------+
| str |
+------------+
| 5,4,3,2,1, |
+------------+
Ejemplo de sintaxis de bucle FOR en 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//
Que imprime:
mysql> call for_loop_example();
+-------------------+
| str |
+-------------------+
| -5,-4,-3,-2,-1,0, |
+-------------------+
1 row in set (0.00 sec)
Haz el tutorial: http://www.mysqltutorial.org/stored-procedures-loop.aspx
Si te veo empujando este tipo de construcciones de MySQL para bucle en producción, te dispararé con el lanzador de misiles de espuma. Puedes usar una llave de tubo para clavar un clavo, pero hacerlo te hace ver como un tonto.
Suponga que tiene una tabla con el nombre ‘table1’. Contiene una columna ‘col1’ con tipo varchar. La consulta a la tabla de cajas se da a continuación
CREATE TABLE `table1` (
`col1` VARCHAR(50) NULL DEFAULT NULL
)
Ahora, si desea insertar un número del 1 al 50 en esa tabla, utilice el siguiente procedimiento almacenado
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 $$
Para llamar a ese procedimiento almacenado, use
CALL `ABC`()
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)