我正在尝试在检查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查询相同的表中。
答案 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;
...