我试图找出如何在mySQL中的函数内存储变量。我正在尝试创建一个大写字段名称的函数。如果我不创建变量,创建函数是有效的。问题是这很难读,而且很容易出错。
CREATE FUNCTION capitalize(string TEXT)
RETURNS TEXT
RETURN CONCAT(UPPER(LEFT(string,1)), LOWER(RIGHT(string, LENGTH(string) - 1)));
当我尝试使用DECLARE
和SET
关键字添加变量时,它不再有效。
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行
我已经摆弄它,删除分号,以及双/三检查括号。我已经摆弄了BEGIN
和END
语句,但似乎没有任何用处。
我已就此主题进行了广泛搜索,但无法确定问题所在。
答案 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
和分号之间的 空格 。)