【问题标题】:Mysql Function returns Null alwaysMysql 函数总是返回 Null
【发布时间】:2013-02-16 05:05:28
【问题描述】:

我在mysql中有一个函数,如下所示:

DELIMITER $$ 

CREATE DEFINER=root@localhost FUNCTION fnGetDropDownValue(
    itemValue varchar(300), 
    DropDownId int, 
    CId int
) RETURNS int(11)
BEGIN
    DECLARE listId int;
    SELECT ListID into listId FROM DropDownListValues WHERE LOWER(ListValue) = LOWER(itemValue) AND DropDownListID = DropDownId AND (ClientId = 0 OR ClientId = CId);
    RETURN listId;
END$$


但是当我使用
SELECT fnGetDropDownValue('General', 24, 18); 时它总是返回 Null 值 我不知道我做错了什么:(

【问题讨论】:

  • 您检查过错误日志吗?你得到什么错误?您采取了哪些措施来解决此问题?
  • 您是否尝试过直接在页面中查询?它会返回值吗?
  • 我曾经在单独的窗口中检查执行选择查询并给出结果
  • 如果将函数中的选择查询替换为简单的SELECT 5 INTO listId,会发生什么情况?它仍然给你NULL吗?
  • 感谢 Alanyst 的帮助,我在 Windows 中注意到它不区分大小写。我将变量 listId 更改为 listId1,现在它可以工作了。

标签: mysql function


【解决方案1】:

在 mysql 列出现区分大小写的问题后,我曾经有变量名以 _ 开头,以避免它与列名混淆。现在存储过程如下所示:

DELIMITER $$ 

CREATE DEFINER=root@localhost FUNCTION fnGetDropDownValue(
    itemValue varchar(300), 
    DropDownId int, 
    CId int
) RETURNS int(11)
BEGIN
    DECLARE _listId int;
    SELECT ListID into _listId FROM DropDownListValues WHERE LOWER(ListValue) = LOWER(itemValue) 
        AND DropDownListID = DropDownId AND (ClientId = 0 OR ClientId = CId);
    RETURN _listId;
END$$

这样它可以在任何平台上运行,并且可能对其他人有用。

【讨论】:

    猜你喜欢
    • 2013-08-01
    • 2019-04-20
    • 2011-03-21
    • 1970-01-01
    • 2018-12-29
    • 2016-01-09
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多