将存储过程输出保存到表中

时间:2014-01-08 20:17:25

标签: mysql stored-procedures

我只执行对存储过程的访问。

此SP似乎从多个表中选择一些数据,并返回一行。我需要将此SP的两列输出存储到表中。

在MySQL中有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

如果返回一行,则这是一个存储函数,而不是存储过程。您可以使用以下内容插入表格中:

INSERT INTO tablename SELECT (SELECT col1, col2 FROM (SELECT somefunction()))

否则,它将是一个存储过程,你应该做这样的事情,假设@var1@var2是输出参数:

CALL someprocedure(@var1, @var2, @var3)
INSERT INTO tablename SELECT(@var1, @var2)

有关函数与过程的详细信息,请参阅有关Create Procedure and Create Function的文档。

答案 1 :(得分:0)

MySQL has an extension到存储过程,允许过程将一个或多个结果集返回给客户端,就好像客户端已发出SELECT查询...但这些结果是短暂的。它们不会持久存在,并且在程序结束后不能存储在变量中或以其他方式访问 - 它们只能被“取出”一次。

正如我在这里讨论的那样, 是一种让它们可以访问而不会破坏程序已经运行的方式的方法,但如果不改变程序就不能这样做:

How to use Table output from stored MYSQL Procedure

这个想法是让程序在临时表中写入它的输出,然后通过对临时表调用SELECT将它返回给调用者 - 但是将临时表保留在后面以便调用者可以如果需要,可以直接访问它。

这与你提出的问题并不完全相同,这就是为什么我没有将这个问题标记为重复,因为你不像其他海报,似乎没有对程序进行行政控制。但是除非你能为这样的改变做出判断,否则MySQL中没有另一种方法可以访问那些返回的值,因为它们只存在于返回的结果集中。

当然,过程确实有可选的OUT参数,您可以将变量作为用于调用它的参数的一部分传递给过程,并且它可以设置这些变量,以便它们具有值在程序完成时你需要,但是只有当返回值是标量并且需要更改过程的接口时才能使用,因为MySQL中的procs没有“可选”参数...如果程序被更改为允许这个,每次调用时都需要提供更多的参数,如果其他组件调用它,那么很容易破坏其他东西。