With loop statements, you can add additional programmability to your reports. Be aware that you do not accidentally serialize SQL statements when using SQL. This may have a negative impact on performance.
drop procedure if exists sp_DBR_fibonacci $$ create procedure sp_DBR_fibonacci( in_value int ) begin declare v_count int; declare v_text varchar( 500 ); declare v_fn2 int default 0; declare v_fn1 int default 1; declare v_fn int; set v_count = 2; set v_text = concat(v_fn2, " ", v_fn1, " "); while (v_count < in_value) do set v_fn = v_fn2 + v_fn1; set v_text = concat(v_text, v_fn, " " ); set v_fn2 = v_fn1; set v_fn1 = v_fn; set v_count = v_count + 1; end while; select v_text as 'fibonacci'; end $$
call sp_DBR_fibonacci( 12 ); +-------------------------------+ | Fibonacci | +-------------------------------+ | 0 1 1 2 3 5 8 13 21 34 55 89 | +-------------------------------+ 1 row in set (0.01 sec) Query OK, 0 rows affected (0.01 sec)
drop procedure if exists sp_DBR_hellos $$ create procedure sp_DBR_hellos() begin declare v_count int default 0; declare v_text varchar( 50 ) default ""; repeat set v_text = concat(v_text, "hello "); set v_count = v_count + 1; until v_count = 5 end repeat; select v_text as 'hellos'; end $$
call sp_DBR_hellos(); +--------------------------------+ | Hellos | +--------------------------------+ | Hello Hello Hello Hello Hello | +--------------------------------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec)
drop procedure if exists sp_DBR_countdown $$ create procedure sp_DBR_countdown() begin declare v_count int default 10; declare v_text varchar( 100 ) default ""; my_loop_label: loop set v_text = concat(v_text, v_count, " "); set v_count = v_count - 1; if v_count = 4 then set v_text = concat(v_text, "#main engine start# "); elseif v_count = 0 then set v_text = concat(v_text, "#solid rocket booster ignition and liftoff#"); leave my_loop_label; end if; end loop; select v_text as 'countdown ...'; end $$
call sp_DBR_countdown(); +----------------------------------------------------------------------------------------+ | Countdown ... | +----------------------------------------------------------------------------------------+ | 10 9 8 7 6 5 #Main engine start# 4 3 2 1 #Solid rocket booster ignition and liftoff# | +----------------------------------------------------------------------------------------+ 1 row in set (0.01 sec) Query OK, 0 rows affected (0.01 sec)