1

我有一个像这样的存储过程:

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 为空且角色代码为 1 的记录,则该过程应返回 true。

4

1 回答 1

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$$
于 2013-08-11T18:53:03.207 回答