如果我有一个名为mytable的表,它有c1(type date)和c2(type character)列,我想创建一个接受输入的存储函数,输入应该始终属于c1,存储函数的输出应该是c2中相应的元素。我曾尝试在存储函数中使用select语句,后跟where子句,但未能实现。有没有其他方法来完成这项任务。
DELIMITER $$
CREATE FUNCTION `MyFunction`
(`Date` datetime)
RETURNS char(10)
BEGIN
DECLARE MyVariable char(10)
SELECT MyVariable = `C2`
FROM MyTable
WHERE `Date` = `C1`; RETURN MyVariable;
END$$
DELIMITER ;
但这一直给我错误代码:1064
1条答案
按热度按时间neskvpey1#
乍一看,我看到一个语法错误:
例程主体中的每条语句都必须以分号结尾。请参阅本手册第页中的declare示例:https://dev.mysql.com/doc/refman/8.0/en/local-variable-scope.html
应该是这样的:
请回复您的意见:
错误1415表示“无法返回结果集”。存储函数正在执行select操作,而不使用
INTO
关键字。您似乎试图使用设置myvariable的值
=
但这只是一个比较。它没有给myvariable赋值。不使用
INTO
要分配变量,您的select语句在默认情况下将返回一个结果集。这在存储过程中是允许的,但在存储函数中是不允许的。存储函数必须返回单个标量值,而不是结果集。p、 答:我编辑了你的问题,将“用户定义函数”替换为“存储函数”。在mysql中这是两个不同的东西。您正在编写一个存储函数。
在mysql中,他们使用术语user-defined function(udf)来表示用c/c++代码实现并编译到mysql服务器中的函数。开发人员编写这种类型的扩展不太常见。