Я пытаюсь создать хранимую функцию, которая проверяет наличие нескольких вещей в базе данных, возвращая логическое утверждение 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: 'Beef'
Я хочу, чтобы функция возвращала значение True, когда хлеб из говядины, курицы или закваски находится в каком-либо определенном порядке бургера, который я тестирую. Но я думаю, что причина в том, что у гамбургера, в который я вхожу, есть 2 мясных котлета внутри. Когда я запускаю вышеупомянутую функцию, она работает нормально. Это только когда я вызываю функцию (EG Select PattyTest (23)) показывает код ошибки 1292.
Странно SQL показывает сообщение об ошибке один раз, затем продолжает нормально работать и возвращает правильные результаты.
Любая помощь очень ценится!