MySQL - Call Multiple Procedures from Within a Procedure -


i want call multiple procedures within procedure. in following sql, create 3 procedures. upd_r_money , upd_r_fuel both work expected when called individually command line. when call upd_all, first call within upd_all run; second call upd_r_money doesn't run.

i can't figure out why happens - maybe in upd_r_fuel procedure causes upd_all procedure end early? newby writing procedures, , sql in general.

there question here problem, answer i'm doing, , answer's link down.

drop procedure upd_r_money; delimiter // create procedure upd_r_money(row_id int) begin declare money_rate int default 1; declare period int default 0; set period = (select timestampdiff(second, (select lastaccessed gamerows id = row_id), now())); update gamerows set money = money + period * money_rate, lastaccessed = now() id = row_id; end; // delimiter ;  drop procedure upd_r_fuel; delimiter // create procedure upd_r_fuel(row_id int) fuel: begin declare fuel_rate int default 1; declare period int default 0; set period = (select timestampdiff(second, (select lastaccessed gamerows id = row_id), now())); update gamerows set fuel = fuel + period * fuel_rate, lastaccessed = now() id = row_id; end fuel; // delimiter ;  drop procedure upd_all; delimiter // create procedure upd_all(row_id int) begin call upd_r_fuel(row_id); call upd_r_money(row_id); end; // delimiter ; 

if copy , paste above sql commands, procedures created no errors , can call 3 of them. wrote earlier, upd_all seems stop after calling first procedure within. if switch upd_r_money upd_r_fuel, same behavior occurs - first procedure called , not second.

enter image description here

i suspect doesn't work expected because update lastaccessed time , calculate difference now. first work because there significant difference. second stored procedure have timestammpdiff between now() , now() - miliseconds.

check if removing in first stored procedure lastaccessed update helps.

drop procedure upd_r_money; delimiter // create procedure upd_r_money(row_id int) begin declare money_rate int default 1; declare period int default 0; set period = (select timestampdiff(second, (select lastaccessed gamerows id = row_id), now())); update gamerows set money = money + period * money_rate id = row_id; end; // delimiter ; 

warning: order of execution matters.

also stored procedures similiar combine them in 1 update:

update gamerows set fuel = fuel + period * fuel_rate,     money = money + period * money_rate,     lastaccessed = now() id = row_id; 

Comments

Popular posts from this blog

php - Invalid Cofiguration - yii\base\InvalidConfigException - Yii2 -

How to show in django cms breadcrumbs full path? -

ruby on rails - npm error: tunneling socket could not be established, cause=connect ETIMEDOUT -