Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL中的存储函数_Mysql_Relational Database_Mysql Workbench - Fatal编程技术网

MYSQL中的存储函数

MYSQL中的存储函数,mysql,relational-database,mysql-workbench,Mysql,Relational Database,Mysql Workbench,如果我有一个名为MyTable的表,它有C1(类型日期)和C2(类型字符)列,我想创建一个存储函数,它接受一个输入,并且输入应该始终属于C1,存储函数的输出应该是C2中相应的元素。我曾尝试在存储函数中使用“select”语句,后跟“where”子句,但未能实现。有没有其他方法来完成这项任务 DELIMITER $$ CREATE FUNCTION `MyFunction` (`Date` datetime) RETURNS char(10) BEGIN DECLARE MyV

如果我有一个名为MyTable的表,它有C1(类型日期)和C2(类型字符)列,我想创建一个存储函数,它接受一个输入,并且输入应该始终属于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初看起来,我看到一个语法错误:

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

请回复您的评论:

错误1415表示“无法返回结果集”。存储函数正在执行选择操作,而不使用
into
关键字将结果放入声明的局部变量中

您似乎试图使用
=
设置MyVariable的值,但这只是进行比较。它没有给MyVariable赋值

如果不在中使用
来分配变量,默认情况下,SELECT语句将返回一个结果集。这在存储过程中是允许的,但在存储函数中是不允许的。存储函数必须返回单个标量值,而不是结果集

...
BEGIN 
  DECLARE MyVariable char(10);

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

  RETURN MyVariable;
END

注:我编辑了你的问题,将“用户定义函数”替换为“存储函数”。在MySQL中,这是两个不同的东西。你在写一篇文章


在MySQL中,它们使用这个术语来表示在C/C++代码中实现并编译到MySQL服务器中的函数。开发人员编写这种类型的扩展不太常见。

如果可以显示一小段代码,堆栈溢出效果会更好,而不是冗长的口头解释。例如,该最小模式的
SHOW CREATE TABLE
,以及您尝试使用的函数。也许你已经完成了99%的路程,我们可以给你所需要的帮助,让你超越终点线。没有这些代码,我们必须从头开始,重新做你所有的工作。@tadman我已经添加了代码片段。我仍然收到错误,但这次是错误代码1415。
...
BEGIN 
  DECLARE MyVariable char(10);

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

  RETURN MyVariable;
END