我正在尝试创建一个存储函数,该函数测试数据库中是否存在多个事物,如果至少存在一个,则返回布尔语句 false,如果不存在则返回 true。
具体来说,我要加入多张桌子,即:BurgerOrder、Patties、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) 因为我找不到布尔数据类型。它当前返回 1 或 0 作为真和假。
其次,我相信这个功能在我实际测试时似乎工作得很好,但有一个错误。
错误代码:1292。截断不正确的 DOUBLE 值:“牛肉”
当牛肉、鸡肉或酸面包在我测试的任何特定汉堡订单中时,我希望该函数返回 True。但我认为导致问题的原因是当我输入的汉堡里面有 2 个牛肉饼时。当我运行上述功能时,它工作正常。只有当我调用函数 (EG Select PattyTest(23)) 时才会显示错误代码 1292。
奇怪的是 SQL 显示了一次错误消息,然后继续正常工作并返回正确的结果。
任何帮助是极大的赞赏!