MySQL:错误代码:1292。截断了不正确的DOUBLE值

问题描述 投票:0回答:3

我正在尝试创建一个存储函数,以测试数据库中是否存在多个事物,如果存在至少一个,则返回布尔值false,如果不存在则返回true。

特别是我要加入的多个表是:BurgerOrder,Pattys,Buns。

BurgerOrder表包含PattyID(汉堡中的肉)和BunID(面包的类型)。请注意,汉堡中可以有2个小馅饼。这是我尝试过的。

DELIMITER //

CREATE FUNCTION PattyTest(BunCode INT)
RETURNS VARCHAR(5) DETERMINISTIC

BEGIN 
    DECLARE Result VARCHAR(5);

    IF BunCode NOT IN (SELECT B.ID 
                        FROM BurgerOrder BO JOIN Patties P JOIN Buns B 
                        ON B.ID = BO.BunID AND P.ID = B.PattyID 
                        WHERE B.Type = 'sourdough' OR P.Type = 'Grilled Chicken' or 'Beef') 
                        THEN SET Result = TRUE;

    ELSE SET Result = FALSE;

    END IF;

    RETURN Result;

END //

DELIMITER ;

我不确定两件事。它返回VARCHAR(5),因为我找不到布尔数据类型。当前返回1s或0s为true和false。

其次,我相信当我实际测试它时,此功能似乎工作正常,出现一个错误。

错误代码:1292。截断了不正确的DOUBLE值:'牛肉'

我希望函数在我测试的任何特定汉堡包中的牛肉,鸡肉或酸面团上都返回True。但是我认为导致问题的原因是,当我输入的汉堡内部有2个牛肉馅饼时。当我运行上述功能时,它可以正常工作。只有当我调用该函数(例如Select PattyTest(23))时,它才会显示错误代码1292。

奇怪的是,SQL仅显示一次错误消息,然后继续正常工作并返回正确的结果。

非常感谢您的帮助!

mysql stored-functions truncated mysql-error-1292
3个回答
0
投票

您在where子句中错过了一个比较列

改用它

DELIMITER //

CREATE FUNCTION PattyTest(BunCode INT)
RETURNS VARCHAR(5) DETERMINISTIC

BEGIN 
    DECLARE Result VARCHAR(5);

IF BunCode NOT IN (SELECT B.ID 
                    FROM BurgerOrder BO JOIN Patties P JOIN Buns B 
                    ON B.ID = BO.BunID AND P.ID = B.PattyID 
                    WHERE B.Type = 'sourdough' OR P.Type = 'Grilled Chicken' or P.Type = 'Beef') 
                    THEN SET Result = TRUE;

ELSE SET Result = FALSE;

END IF;

RETURN Result;

END //

DELIMITER ;

0
投票

此消息表示您正在试图比较数字和字符串中的WHERE或ON子句,请确保它们具有相似的声明,或使用显式的CAST将数字转换为字符串。


0
投票

我想WHERE子句P.Type ='Grilled Chicken'或'Beef'中存在问题使用多个OR子句的DB引擎尝试将'Beef'评估为单独的条件

将其更改为

[WHERE B.Type ='sourdough'or P.Type in('Grilled Chicken'or'Beef')] >>

© www.soinside.com 2019 - 2024. All rights reserved.