我有一个类似的存储过程:
delimiter //
create procedure UserRole_IsUserAdmin(userID int)
begin
if userID is null then
select 'User ID is required.';
else
if (
select
count(UserRoleCode)
from
UserRole
where
UserID = userID
and RoleCode = 1
and VendorCode is null
and NPOCode is null
) > 0 then
select true;
else
select false;
end if;
end if;
end;
//
if语句中的子查询有时会返回0(例如,当userID为5时),有时会返回1(例如,当userID为1时)。问题是存储过程总是选择true。我无法弄清楚为什么,这让我疯了。我不知道我在if语句中做错了什么,或者是什么。
调用程序的代码:
call UserRole_IsUserAdmin(5);
/*Should return false*/
call UserRole_IsUserAdmin(1);
/*Should return true*/
根据要求,这是表格的数据
UserID是用户的FK ID,RoleCode是用户所在角色的FK ID.UserRoleCode只是一个自动递增的PK。如果存在ncode和vcode为null且rolecode为1的记录,则该过程应返回true。
答案 0 :(得分:2)
我没有你的简单数据,但对我来说工作......那样的。
BEGIN
IF userID IS NULL THEN
SELECT 'User ID is required.';
ELSE
SELECT IF(COUNT(*)>0,TRUE,FALSE) AS if_stmt
from
UserRole
where
UserID = userID
and RoleCode = 1
and VendorCode is null
and NPOCode is null;
END IF;
END$$