1

我有 2 个程序:AB.

A电话BB电话A。如果程序已经从另一个程序调用,我需要阻止调用。如何检查?

4

3 回答 3

1

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 时可能会得到一些错误的结果。

于 2013-09-20T20:33:44.837 回答
0

作为变体,您可以从表 IsExecFromA 中检查一些值。并在 proc B 中检查这一点。如果 IsExecFromA = true 则不再执行 proc A 等。你?

于 2013-09-20T20:27:11.193 回答
0

我使用了以下方法:

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
于 2013-09-20T20:38:57.713 回答