MySQL - 在CREATE FUNCTION中存储变量

时间:2016-01-04 17:36:05

标签: mysql sql function syntax

我试图找出如何在mySQL中的函数内存储变量。我正在尝试创建一个大写字段名称的函数。如果我不创建变量,创建函数是有效的。问题是这很难读,而且很容易出错。

CREATE FUNCTION capitalize(string TEXT)
    RETURNS TEXT
    RETURN CONCAT(UPPER(LEFT(string,1)), LOWER(RIGHT(string, LENGTH(string) - 1)));

当我尝试使用DECLARESET关键字添加变量时,它不再有效。

CREATE FUNCTION capitalize(string TEXT)
    RETURNS TEXT
    DECLARE first_letter TEXT;
    DECLARE last_letters TEXT;
    SET first_letter = UPPER(LEFT(string,1));
    SET last_letters = LOWER(RIGHT(string, LENGTH(string) - 1));
    RETURN CONCAT(first_letter, last_letters);

我收到此错误消息

  

您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得在''附近使用的正确语法。在第4行

我已经摆弄它,删除分号,以及双/三检查括号。我已经摆弄了BEGINEND语句,但似乎没有任何用处。

我已就此主题进行了广泛搜索,但无法确定问题所在。

1 个答案:

答案 0 :(得分:1)

CREATE FUNCTION的主体只能包含一个语句,这就是第一个版本有效而​​第二个版本无效的原因。幸运的是,该单个语句可以是BEGIN ... END块中包含的复合语句。

您需要将函数体括在BEGIN ... END块中,以允许MySQL将其视为单个语句;你也或许需要在DELIMITER陈述之前和之后(取决于你的客户,正如Berkowski先生指出的那样):

DELIMITER //

CREATE FUNCTION capitalize(string TEXT)
    RETURNS TEXT
    BEGIN
      DECLARE first_letter TEXT;
      DECLARE last_letters TEXT;
      SET first_letter = UPPER(LEFT(string,1));
      SET last_letters = LOWER(RIGHT(string, LENGTH(string) - 1));
      RETURN CONCAT(first_letter, last_letters);
    END; //

DELIMITER ;

(特别注意最后DELIMITER和分号之间的 空格 。)