MySQL:SET如果存在条件则变量

时间:2018-03-30 21:33:22

标签: mysql variables if-statement stored-procedures mysql-workbench

我正在尝试在检查if exists条件时设置变量。 我已经使用:= 来设置变量,但是,出于某种原因,当我尝试在if exists条件中设置变量时,它会显示上一个查询的结果。 以下是存储过程的代码段。

if exists (select @AccountVerified := AccountVerified, @IsActive := IsActive  from tblUserLookUp where UserName = inUserName) then
        begin
            select "1: From if condition", @AccountVerified, @IsActive;

            select @AccountVerified := AccountVerified, @IsActive := IsActive  from tblUserLookUp where UserName = inUserName;
            select "2: From select condition", @AccountVerified, @IsActive;
            select @AccountVerified, @IsActive;

            if @AccountVerified = 0 then
                set outErrorCode = 3;
            elseif  @IsActive = 0 then
                set outErrorCode = 4;
            end if;
        end;
    else
        set outErrorCode = 1;
    end if;

我通过尝试在if条件之后通过select语句打印值并在表上再次运行select查询后观察到这一点。

  

2:从选择条件

似乎显示实际的当前结果 但是,

  

1:从条件

开始

似乎显示上一个查询的值。

是否存在变量缓存的概念,或者您是否无法在if条件中设置变量?我也对你可能提出的任何其他建议持开放态度。

执行此操作的唯一原因是将该选择查询保存在与if exists select查询相同的表中。

1 个答案:

答案 0 :(得分:1)

  

13.2.10.6 Subqueries with EXISTS or NOT EXISTS

     

...

     

传统上,EXISTS子查询以SELECT *开头,但它   可以从SELECT 5或SELECT column1开始,或者任何东西。 MySQL的   忽略这样一个子查询中的SELECT列表,所以没有区别。

     

...

选项:

...
SELECT
  @AccountVerified := AccountVerified,
  @IsActive := IsActive,
  @Exists := TRUE
FROM tblUserLookUp,
     (SELECT
       @AccountVerified := NULL,
       @IsActive := NULL,
       @Exists := FALSE) `init`
WHERE UserName = inUserName;

IF (@Exists) THEN
  ...
ELSE
  ...
END IF;
...