3

我正在尝试在declare [variable]语句中使用CREATE FUNCTION语句。

我的代码是

/* DELIMITER // */

CREATE FUNCTION hello_world()
  RETURNS TEXT
DECLARE bae int;
BEGIN
  RETURN 'Hello World';
END;
//
/* DELIMITER ; */

代码在不使用声明的情况下运行良好,但是使用声明它给了我错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解要使用的正确语法...

我如何才能在函数或存储过程中实际使用声明语句?

4

2 回答 2

2

不要注释掉分隔符,声明需要紧跟在 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 行的 '' 附近使用正确的语法

所以这种不一致的行为很烦人。

于 2015-05-02T17:39:56.770 回答
0

中,您在-块declare内为每个声明添加, :beginend

CREATE FUNCTION hello_world()
RETURNS TEXT
BEGIN
    DECLARE bae int;
    RETURN 'Hello World';
END;
于 2015-05-02T17:34:02.317 回答