процедура или функция для вставки, если строка не существует - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь написать функцию или процедуру, которая проверяет, существует ли строка, и возвращает идентификатор строки;в противном случае он создает строку и возвращает идентификатор этой строки.Вот что у меня есть:

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.Любые мысли о том, где я иду не так?

1 Ответ

0 голосов
/ 18 мая 2018

Заменить

IF school_id = NULL THEN

с

IF school_id IS NULL THEN

.

Из документов :

Вы не можете использовать операторы арифметического сравнения, такие как =, <или <>, чтобы проверить на NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...