Mysql 返回表的存储过程/函数

Mysql 返回表的存储过程/函数,mysql,sql,Mysql,Sql,我们正在MariaDB引擎下运行我们的数据库。 目前,我有一个查询,它正是我所需要的: SELECT task.titolo, risposte.valore FROM task INNER JOIN risposte ON task.Id = risposte.id_task WHERE task.ID_campagna=1 AND task.stato = 1 AND task.risultato = risposte.id 但是,我希望查询更加通用,特别是对于WHERE子句中所需的字段

我们正在MariaDB引擎下运行我们的数据库。 目前,我有一个查询,它正是我所需要的:

SELECT task.titolo, risposte.valore
FROM task
INNER JOIN risposte ON task.Id = risposte.id_task
WHERE task.ID_campagna=1
AND task.stato = 1
AND task.risultato = risposte.id
但是,我希望查询更加通用,特别是对于WHERE子句中所需的字段

我们试图创建一个存储函数,如下所示:

CREATE FUNCTION `taskCompleti`(
        idCamp INT
)
returns table
as
BEGIN
SELECT task.titolo, risposte.valore
FROM task
INNER JOIN risposte ON task.Id = risposte.id_task
WHERE task.ID_campagna=@idCamp
AND task.stato = 1
AND task.risultato = risposte.id
END
CREATE PROCEDURE 
  taskCompleti( idCamp INT )
BEGIN  
   SELECT task.titolo, risposte.valore
FROM task
INNER JOIN risposte ON task.Id = risposte.id_task
WHERE task.ID_campagna = idCamp
AND task.stato = 1
AND task.risultato = risposte.id
END 
CALL taskCompleti( 1 )
但当我们尝试运行它时,它会给我们以下错误:

MySQL Error Number 1064
You have an error in you SQL syntax, ... 
我们做错了什么?这个问题有什么解决办法吗


谢谢

在MySQL中无法编写表值存储函数

就像MySQL一样 只能返回
{STRING | INTEGER | REAL | DECIMAL}
类型的值

对于您的情况,您必须像这样使用
过程

CREATE FUNCTION `taskCompleti`(
        idCamp INT
)
returns table
as
BEGIN
SELECT task.titolo, risposte.valore
FROM task
INNER JOIN risposte ON task.Id = risposte.id_task
WHERE task.ID_campagna=@idCamp
AND task.stato = 1
AND task.risultato = risposte.id
END
CREATE PROCEDURE 
  taskCompleti( idCamp INT )
BEGIN  
   SELECT task.titolo, risposte.valore
FROM task
INNER JOIN risposte ON task.Id = risposte.id_task
WHERE task.ID_campagna = idCamp
AND task.stato = 1
AND task.risultato = risposte.id
END 
CALL taskCompleti( 1 )

按如下方式调用您的过程:

CREATE FUNCTION `taskCompleti`(
        idCamp INT
)
returns table
as
BEGIN
SELECT task.titolo, risposte.valore
FROM task
INNER JOIN risposte ON task.Id = risposte.id_task
WHERE task.ID_campagna=@idCamp
AND task.stato = 1
AND task.risultato = risposte.id
END
CREATE PROCEDURE 
  taskCompleti( idCamp INT )
BEGIN  
   SELECT task.titolo, risposte.valore
FROM task
INNER JOIN risposte ON task.Id = risposte.id_task
WHERE task.ID_campagna = idCamp
AND task.stato = 1
AND task.risultato = risposte.id
END 
CALL taskCompleti( 1 )

显然,我们的问题是在查询中使用@before-idCamp。你的解决方案有效,只是遗漏了一个问题;在查询的末尾。谢谢!