MySQL存储过程总是选择True

时间:2013-08-11 18:24:02

标签: mysql stored-procedures

我有一个类似的存储过程:

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*/

根据要求,这是表格的数据 Sample Data

UserID是用户的FK ID,RoleCode是用户所在角色的FK ID.UserRoleCode只是一个自动递增的PK。如果存在ncode和vcode为null且rolecode为1的记录,则该过程应返回true。

1 个答案:

答案 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$$