DROP FUNCTION IF EXISTS test;
DELIMITER $$
CREATE FUNCTION test(in_number INT) RETURNS INT
BEGIN
DECLARE countTotal INT;
SET countTotal = SELECT COUNT(*) FROM nGrams;
RETURN countTotal + in_number;
END $$
DELIMITER ;
DELIMITER $$
CREATE FUNCTION my_func() RETURNS INT
DETERMINISTIC
BEGIN
DECLARE v1, v2 INT DEFAULT 2; -- v1 and v2 are 2.
DECLARE v3, v4 INT DEFAULT v1 + v2; -- v3 and v4 are 4.
DECLARE result INT; -- result is NULL.
SELECT v3 + v4 INTO result; -- result is 8.
RETURN result; -- 8 is returned.
END$$
DELIMITER ;
DELIMITER $$
CREATE FUNCTION my_func() RETURNS INT
DETERMINISTIC
BEGIN
SELECT 2 + 3; -- Because of this
DECLARE v1, v2 INT DEFAULT 2; -- Not the top
DECLARE v3, v4 INT DEFAULT v1 + v2; -- Not the top
DECLARE result INT; -- Not the top
SELECT v3 + v4 INTO result;
RETURN result;
END$$
DELIMITER ;
型 或者:
DELIMITER $$
CREATE FUNCTION my_func() RETURNS INT
DETERMINISTIC
BEGIN
DECLARE v1, v2 INT DEFAULT 2;
DECLARE v3, v4 INT DEFAULT v1 + v2;
SELECT 2 + 3; -- Because of this
DECLARE result INT; -- Not the top
SELECT v3 + v4 INTO result;
RETURN result;
END$$
DELIMITER ;
5条答案
按热度按时间osh3o9ms1#
试试这个:
字符串
pkmbmrz72#
功能示例:
字符串
lg40wkob3#
根据DECLARE Syntax,
declare
必须位于开始.结束块中。n3schb8v4#
您可以使用DECLARE statement设置局部变量,如下所示:
字符串
DEFAULT
初始化局部变量。DEFAULT
的局部变量的初始值是NULL
。DECLARE
块可以在BEGIN ... END statement的顶部设置stored programs内的functions、procedures、events和triggers。然后,返回
8
,如下所示:型
请注意,如果
DECLARE
块没有在存储程序中的BEGIN ... END
语句的顶部设置,如下所示:型
或者:
型
然后,下面是错误:
错误1064(42000):您的SQL语法中有一个错误;请检查与您的MySQL服务器版本对应的手册,以获得正确的语法来使用。
lrl1mhuk5#
MySQL有两种不同类型的变量:
局部变量( 没有 * 前缀
@
)是强类型的,作用域是声明它们的存储程序块。请注意,如DECLARE
Syntax下所述:DECLARE
只允许在BEGIN ... END
复合语句中使用,并且必须位于其开头,在任何其他语句之前。@
)是松散类型的,作用域为会话。请注意,它们既不需要也不能被替换-直接使用它们。因此,如果你正在定义一个存储程序,并且确实想要一个“局部变量”,根据你的问题中的措辞,你需要删除
@
字符,并确保你的DECLARE
语句位于程序块的开头。否则,要使用“用户变量”,请删除DECLARE
语句。此外,您需要将查询括在括号中,以便将其作为子查询执行:
字符串
或者,你可以使用
SELECT ... INTO
:型