触发器如下:
DELIMITER //
CREATE TRIGGER `Conturi_BI` BEFORE INSERT ON `Conturi` FOR EACH ROW BEGIN
SET NEW.CUI_cod = digits(NEW.CUI);
END//
DELIMITER ;
我只是将数字功能应用于用户输入,以便更快地进行匹配和重复搜索,但是自从实现该功能以来,我的一些插入内容就挂了.我做了类似的更新,它没有相同的问题.
digits函数是由我和触发器创建的,并且在大多数情况下可以正常工作.
根据要求提供数字功能:
BEGIN
DECLARE i, len SMALLINT DEFAULT 1;
DECLARE ret CHAR(32) DEFAULT '';
DECLARE c CHAR(1);
SET len = CHAR_LENGTH( str );
REPEAT
BEGIN
SET c = MID( str, i, 1 );
IF c BETWEEN '0' AND '9' THEN
SET ret=CONCAT(ret,c);
END IF;
SET i = i + 1;
END;
UNTIL i > len END REPEAT;
RETURN ret;
END
解决方法:
如果将null传递给数字函数,则数字函数将不起作用.它将永远循环.尝试一下
select digits(null)
因此,每次NEW.CUI为null时,它将使您的插入物挂起.您可以在函数的开头添加一个空检查:
if str is null
then
return '';
end if;