mysql中的关系数据库存储函数

vpfxa7rd  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(346)

如果我有一个名为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

neskvpey

neskvpey1#

乍一看,我看到一个语法错误:

...
BEGIN 
  DECLARE MyVariable char(10)     <-- needs a semicolon here
  SELECT MyVariable = `C2`
  ...

例程主体中的每条语句都必须以分号结尾。请参阅本手册第页中的declare示例:https://dev.mysql.com/doc/refman/8.0/en/local-variable-scope.html
应该是这样的:

...
BEGIN 
  DECLARE MyVariable char(10);
  SELECT MyVariable = `C2`
  ...

请回复您的意见:
错误1415表示“无法返回结果集”。存储函数正在执行select操作,而不使用 INTO 关键字。
您似乎试图使用设置myvariable的值 = 但这只是一个比较。它没有给myvariable赋值。
不使用 INTO 要分配变量,您的select语句在默认情况下将返回一个结果集。这在存储过程中是允许的,但在存储函数中是不允许的。存储函数必须返回单个标量值,而不是结果集。

...
BEGIN 
  DECLARE MyVariable char(10);

  SELECT `C2` INTO MyVariable
  FROM MyTable
  WHERE `Date` = `C1`;

  RETURN MyVariable;
END

p、 答:我编辑了你的问题,将“用户定义函数”替换为“存储函数”。在mysql中这是两个不同的东西。您正在编写一个存储函数。
在mysql中,他们使用术语user-defined function(udf)来表示用c/c++代码实现并编译到mysql服务器中的函数。开发人员编写这种类型的扩展不太常见。

相关问题