我希望从一个过程内调用多个过程。在下面的SQL中,我创建了三个过程。当我从命令行单独调用upd_r_money和upd_r_fuel时,它们都按预期工作。但是当我调用upd_all时,只有在upd_all内的第一次调用运行;第二次调用upd_r_money不运行。
我无法弄清楚为什么会发生这种情况——也许是我的upd_r_fuel过程中的某些内容导致我的upd_all过程提前结束?我是编写过程和SQL的新手。
这里曾经有另一个关于这个问题的问题,但答案与我已经在做的完全相同,答案的链接已失效。
如果我复制并粘贴上面的SQL命令,我的过程将成功创建且无错误,并且我可以调用其中的所有三个。然而,正如我先前所写的那样,upd_all似乎在调用其内部的第一个过程后停止。如果我使用upd_r_fuel替换upd_r_money,则会发生相同的行为-仅调用第一个过程。
我无法弄清楚为什么会发生这种情况——也许是我的upd_r_fuel过程中的某些内容导致我的upd_all过程提前结束?我是编写过程和SQL的新手。
这里曾经有另一个关于这个问题的问题,但答案与我已经在做的完全相同,答案的链接已失效。
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 from gamerows where id = row_id), now()));
update gamerows
set money = money + period * money_rate,
lastaccessed = now()
where 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 from gamerows where id = row_id), now()));
update gamerows
set fuel = fuel + period * fuel_rate,
lastaccessed = now()
where 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 ;
如果我复制并粘贴上面的SQL命令,我的过程将成功创建且无错误,并且我可以调用其中的所有三个。然而,正如我先前所写的那样,upd_all似乎在调用其内部的第一个过程后停止。如果我使用upd_r_fuel替换upd_r_money,则会发生相同的行为-仅调用第一个过程。