返回表的存储过程/函数

时间:2018-04-20 08:37:23

标签: mysql sql

我们在MariaDB引擎下运行我们的数据库。 目前我有这个查询,它完全符合我的需要:

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

但是,我希望查询更通用,特别是对于WHERE子句中所需的字段。

我们尝试创建这样的存储功能:

MySQL Error Number 1064
You have an error in you SQL syntax, ... 

但是当我们尝试运行它时,它会给我们这个错误:

{{1}}

我们在这里做错了什么?该问题的任何解决方案?

由于

1 个答案:

答案 0 :(得分:1)

在MySQL中编写表值存储函数是不可能的。

在MySQL中为per documentation on user-defined functions 您只能返回{STRING|INTEGER|REAL|DECIMAL}类型的值。

对于您的情况,您必须使用Procedure,如下所示:

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 

AND

按照以下方式调用您的程序:

CALL taskCompleti( 1 )