【发布时间】:2015-10-10 07:58:55
【问题描述】:
我想从一个过程中调用多个过程。在下面的 SQL 中,我创建了三个过程。当从命令行单独调用时,upd_r_money 和 upd_r_fuel 都按预期工作。当我调用 upd_all 时,只运行 upd_all 中的第一个调用;第二次调用 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,则会发生相同的行为 - 调用第一个过程而不是第二个。
【问题讨论】:
-
我喜欢你图片中的开头。透明控制台背景 ;)