我正在尝试创建这个函数:
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE v_char VARCHAR(1);
DECLARE v_parseStr VARCHAR(3000) DEFAULT '';
WHILE (i <= LENGTH(prm_strInput) ) DO
SET v_char = SUBSTR(prm_strInput,i,1);
IF v_char REGEXP '^[A-Za-z0-9]$' THEN
SET v_parseStr = CONCAT(v_parseStr,v_char);
END IF;
SET i = i + 1;
END WHILE;
RETURN trim(v_parseStr);
END
但是 MySQL 说:
13:52:45 [CREATE - 0 行,0.000 秒] [错误代码:1064,SQL 状态:42000] 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 5 行 '' 附近使用的正确语法
我可能错了什么?语法对我来说看起来是正确的。
I'm trying to create this function:
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE v_char VARCHAR(1);
DECLARE v_parseStr VARCHAR(3000) DEFAULT '';
WHILE (i <= LENGTH(prm_strInput) ) DO
SET v_char = SUBSTR(prm_strInput,i,1);
IF v_char REGEXP '^[A-Za-z0-9]
But MySQL says:
13:52:45 [CREATE - 0 row(s), 0.000 secs] [Error Code: 1064, SQL State: 42000] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5
What could I being wrong? The syntax looks correct to me.
THEN
SET v_parseStr = CONCAT(v_parseStr,v_char);
END IF;
SET i = i + 1;
END WHILE;
RETURN trim(v_parseStr);
END
But MySQL says:
13:52:45 [CREATE - 0 row(s), 0.000 secs] [Error Code: 1064, SQL State: 42000] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5
What could I being wrong? The syntax looks correct to me.
发布评论
评论(3)
您必须更改分隔符,以便可以在函数内使用
;
:在 MySQL 命令行客户端(以及许多其他 SQL 客户端)默认分隔符是
;
。因此,当您键入原始代码时,MySQL 认为第一个命令在找到第一个;
的地方结束(在第 5 行,如错误消息所述),因此您会收到错误,因为这是无效的SQL:如果您将分隔符更改为其他任何内容,MySQL 会识别完整的命令(从
CREATE FUNCTION
到END
并运行它。瞧!您的函数已创建。最后,当你运行你的函数,代码运行得很好因为函数体是由使用默认分隔符的多个语句组成的。You have to change the delimiter so you can use
;
inside the function:In MySQL Command-Line Client (and many other SQL clients) the default delimiter is
;
. So, when you type your original code, MySQL thinks the first command ends where the first;
is found (at line 5, as the error message states), thus you get an error because this is not valid SQL:If you change the delimiter to anything else, MySQL identifies the complete command (from
CREATE FUNCTION
toEND
and runs it. Voilá! Your function is created. Finally, when you run your function, the code runs just fine because the function body is composed of several statements using the default delimiter.我在此处找到了答案。
我发现这是一些奇怪的 DB Visualizer 问题。
将完整的块括在“--/”和“/”中对我有用:
I found the answer here.
I turns out it was some weird DB Visualizer issue.
Enclosing the complete block in "--/" and "/" worked for me:
替代方法
是:
更多信息:http://www .dbvis.com/doc/main/doc/ug/sqlCommander/sqlCommander.html#mozTocId437790
An alternative to
is:
More info: http://www.dbvis.com/doc/main/doc/ug/sqlCommander/sqlCommander.html#mozTocId437790