我试图创建这个函数:
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创建-0行,0.000秒您的SQL语法有错误;请检查与MySQL服务器版本对应的手册,以获得在第5行使用的正确语法。
我有什么错?在我看来,语法是正确的。
发布于 2011-07-08 18:33:27
我找到了答案,这里。
我发现这是一些奇怪的DB Visualizer问题。
随附“-/”和"/“中的整个街区为我工作:
--/
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
/发布于 2011-07-08 18:00:29
您必须更改分隔符,以便在函数中使用;:
DELIMITER $$
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
$$
DELIMITER ;在MySQL命令行客户端 (和许多其他SQL客户端)中,默认的分隔符是;。因此,当您键入原始代码时,MySQL认为第一个命令结束于找到第一个;的地方(在第5行,正如错误消息所述),因此您将得到一个错误,因为这是无效的:
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;如果将分隔符更改为其他任何内容,MySQL将标识完整的命令(从CREATE FUNCTION到END并运行它)。哇!您的函数被创建了。最后,在运行函数时,代码运行得很好,因为函数体由几个使用默认分隔符的语句组成。
发布于 2013-07-31 15:37:05
替代物
--/
CREATE FUNCTION ...
/ 是:
@delimiter $$;
CREATE FUNCTION ...
@delimiter ;$$更多信息:http://www.dbvis.com/doc/main/doc/ug/sqlCommander/sqlCommander.html#mozTocId437790
https://stackoverflow.com/questions/6628390
复制相似问题