我正在尝试编写一个函数或过程来检查行是否存在并返回行id;否则它会创建一行并返回该行ID。这就是我所拥有的:
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 ;
如果行存在,它可以正常工作。但它似乎不想执行该insert语句。如果您尝试在新学校上调用该功能,则不会创建该学校。我也尝试用OUT参数编写这个程序。关于我哪里出错的任何想法?
答案 0 :(得分:1)
替换
IF school_id = NULL THEN
与
IF school_id IS NULL THEN
来自docs:
您不能使用算术比较运算符,例如=,<或<>测试NULL。