不要注释掉分隔符,声明需要紧跟在 begin 语句之后:
DELIMITER //
CREATE FUNCTION hello_world() RETURNS TEXT
BEGIN
DECLARE bae INT;
RETURN 'Hello World';
END
//
DELIMITER; --restore delimiter
SELECT hello_world() --Hello World
编辑:
我从来没有使用过 sql fiddle。我已经玩了 5 分钟,我讨厌它:)
显然,sql fiddle 有不同的语法规则。适用于此的是它们不支持分隔符,但确实//
内置为“已知分隔符”(Execute triggers stored procedures on SqlFiddle.Mysql)
所以,这有效:
CREATE function hello_world() returns text
BEGIN
declare bae int;
return "hello world";
END//
select hello_world()
http://sqlfiddle.com/#!2/8e5da4/1
所以,有一个工作小提琴。我手动输入了这个函数,它可以工作。但是,我从字面上将其复制粘贴到一个新的 sqlfiddle 中,我得到了
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 '' 附近使用正确的语法
所以这种不一致的行为很烦人。