MYSQL中的存储函数
如果我有一个名为MyTable的表,它有C1(类型日期)和C2(类型字符)列,我想创建一个存储函数,它接受一个输入,并且输入应该始终属于C1,存储函数的输出应该是C2中相应的元素。我曾尝试在存储函数中使用“select”语句,后跟“where”子句,但未能实现。有没有其他方法来完成这项任务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
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