无法在 mariaDB 10.6.8 中创建函数,但可以在 10.2 中使用
Not able to creat funtion in mariaDB 10.6.8, but was working in 10.2
DELIMITER ;;
CREATE FUNCTION `substrCount`(s varchar(65530), ss VARCHAR(255)) RETURNS mediumint(8) unsigned
BEGIN
DECLARE count MEDIUMINT(4);
DECLARE offset MEDIUMINT(4);
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s = NULL;
SET count = 0;
SET offset = 1;
REPEAT
IF NOT ISNULL(s) AND offset > 0 THEN
SET offset = LOCATE(ss, s, offset);
IF offset > 0 THEN
SET count = count + 1;
SET offset = offset + 1;
END IF;
END IF;
UNTIL ISNULL(s) OR offset = 0 END REPEAT;
RETURN count;
END ;;
DELIMITER ;
它在 10.2 MariaDB 中运行良好,但在 10.6.8 中出现语法错误
SQL 错误 (1064):您的 SQL 语法有误;查看与您的 MariaDB 服务器版本对应的手册,了解在 'offset MEDIUMINT(4); 附近使用的正确语法;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s = N...' 在第 4 行 */
Offset
在 10.6 中成为保留关键字,现在需要引用(或更改您的变量名称)。
DELIMITER ;;
CREATE FUNCTION `substrCount`(s varchar(65530), ss VARCHAR(255)) RETURNS mediumint(8) unsigned
BEGIN
DECLARE count MEDIUMINT(4);
DECLARE offset MEDIUMINT(4);
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s = NULL;
SET count = 0;
SET offset = 1;
REPEAT
IF NOT ISNULL(s) AND offset > 0 THEN
SET offset = LOCATE(ss, s, offset);
IF offset > 0 THEN
SET count = count + 1;
SET offset = offset + 1;
END IF;
END IF;
UNTIL ISNULL(s) OR offset = 0 END REPEAT;
RETURN count;
END ;;
DELIMITER ;
它在 10.2 MariaDB 中运行良好,但在 10.6.8 中出现语法错误
SQL 错误 (1064):您的 SQL 语法有误;查看与您的 MariaDB 服务器版本对应的手册,了解在 'offset MEDIUMINT(4); 附近使用的正确语法; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s = N...' 在第 4 行 */
Offset
在 10.6 中成为保留关键字,现在需要引用(或更改您的变量名称)。