【发布时间】:2016-04-08 09:25:32
【问题描述】:
我试图弄清楚如何在 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 语句,但似乎没有任何效果。
我已就该主题进行了广泛搜索,但无法找出问题所在。
【问题讨论】:
-
是否允许多次声明?您可以使用单个
declare... 声明多个变量 -
你用什么 MySQL 客户端来创建这个?您可能需要先添加
BEGIN/END,然后再添加specify an alternate delimiter. 做这两件事,我就能创建您的函数。 -
把所有东西都删掉。添加命令以返回字符串。如果成功运行,请一一取消注释命令,直到错误再次出现。
-
@MichaelBerkowski 不,你没有。这是工作示例的 SQLFiddle。 sqlfiddle.com/#!9/b1e9e
-
@RichardHamilton 是的。该版本的函数只执行一个 SQL 语句。变量声明使它成为一个多语句体,这意味着你需要一个
BEGIN/END。