gpt4 book ai didi

MySQL - 在 CREATE FUNCTION 中存储变量

转载 作者:行者123 更新时间:2023-11-29 02:52:04 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何在 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);

我收到此错误消息

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4

我一直在摆弄它,删除分号,并双重/三次检查括号。我摆弄过 BEGINEND 语句,但似乎没有任何效果。

我对这个主题进行了广泛的搜索,但无法找出问题所在。

最佳答案

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

您需要将函数体包含在 BEGIN ... END block 中,以允许 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 和分号之间的空格。)

关于MySQL - 在 CREATE FUNCTION 中存储变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34596691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com