我有 2 个程序:A
和B
.
A
电话B
和B
电话A
。如果程序已经从另一个程序调用,我需要阻止调用。如何检查?
MySQL用户定义的变量对您的会话是全局的。
因此,您可以在过程 A 中将变量设置为 TRUE,然后在过程 B 中对其进行检查。
程序 A:
BEGIN
IF NOT @called = 1 THEN
SET @called := 1;
CALL B();
SET @called := NULL;
END IF;
END
程序 B:
BEGIN
IF NOT @called = 1 THEN
SET @called := 1;
CALL A();
SET @called := NULL;
END IF;
END
这些变量对于会话是全局的,即每个会话都有自己的变量版本。因此,如果多个用户会话正在调用过程,则不会有问题。
但是您确实有一个问题,即用户定义的变量会持续到当前会话结束。这就是为什么我在调用另一个 proc 之后将变量设置为 NULL 的原因。但是,如果在将变量设置为 NULL 之前中断了 proc,那么下次尝试调用 proc 时可能会得到一些错误的结果。
作为变体,您可以从表 IsExecFromA 中检查一些值。并在 proc B 中检查这一点。如果 IsExecFromA = true 则不再执行 proc A 等。你?
我使用了以下方法:
create procedure A()
begin
call B();
call A_Code();
end
create procedure A_Code()
begin
...code...
end
create procedure B()
begin
...code...
call A_Code();
end