mysql - 过程总是返回空列

标签 mysql stored-procedures

即使数据库中存在匹配的数据,以下存储过程也不返回任何内容。

DELIMITER $$

    DROP PROCEDURE IF EXISTS `portaldb`.`hasPrivateCloud`$$

    CREATE DEFINER=`root`@`localhost` PROCEDURE `hasPrivateCloud`(in_userId int)
    begin
        if in_userId is not null then
            select (case when ui.privateCloud is null
                    then false
                    else ui.privateCloud
                    end) as hasPrivateCloud from userinfo as ui where ui.userid = in_userId;
        end if;
    end$$

    DELIMITER ;

privateCloud 是一个 bool 字段。如果字段为 false 或不满足 where 子句,则过程应返回 false,而当满足 where 子句时,则应返回列值。但它总是返回一个空列。

这可能是什么原因?

最佳答案

当记录不存在时,不返回任何内容。不像您假设的那样,是 NULL 记录。

你可以这样写

IF EXISTS (SELECT privateCloud FROM userinfo WHERE userid = in_userId)
    SELECT privateCloud FROM userinfo WHERE userid = in_userId;
ELSE
    SELECT 'false';
END IF;

当您如此关心性能时,您甚至可以这样做

IF EXISTS (SELECT @result := privateCloud FROM userinfo WHERE userid = in_userId)
    SELECT @result;
ELSE
    SELECT 'false';
END IF;

关于mysql - 过程总是返回空列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40653045/

相关文章:

mysql - 在应用程序中混合使用 MySQL 和 Mongodb

mysql - 偶尔出现的新列 : new columns or separate table or json column

mysql - 在数据库中设置选定行的最佳实践

mysql - 使用过程 : error 1064 创建一个表

sql - 检查给定的 DB 对象是否在 Oracle 中使用?

mysql - 选择要在 GROUP BY 行上返回的结果

javascript - 返回对象的 ID 为零(在数据库中创建记录)

javascript - 在 Cosmos DB 存储过程中创建和比较日期

sql - 如何从 Sproc 中识别存储过程的调用者

C# WebAPI 交叉更新多个表的内连接数据