Я пытаюсь написать функцию или процедуру, которая проверяет, существует ли строка, и возвращает идентификатор строки;в противном случае он создает строку и возвращает идентификатор этой строки.Вот что у меня есть:
DELIMITER //
DROP FUNCTION IF EXISTS `is_school`//
CREATE FUNCTION is_school (school_name VARCHAR(255))
RETURNS INT unsigned
MODIFIES SQL DATA
BEGIN
DECLARE school_id INT unsigned;
SELECT `id` INTO school_id FROM `schools` WHERE `name`=school_name LIMIT 1;
IF school_id = NULL THEN
INSERT INTO `schools` (`name`) VALUES (school_name);
RETURN LAST_INSERT_ID();
ELSE
RETURN school_id;
END IF;
END //
DELIMITER ;
Работает нормально, если строка существует.Но, похоже, он не хочет выполнять этот оператор вставки.Если вы попытаетесь вызвать функцию в новой школе, она не создаст эту школу.Я также попытался написать это как процедуру с параметром OUT.Любые мысли о том, где я иду не так?