我只执行对存储过程的访问。
此SP似乎从多个表中选择一些数据,并返回一行。我需要将此SP的两列输出存储到表中。
在MySQL中有没有办法做到这一点?
答案 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没有“可选”参数...如果程序被更改为允许这个,每次调用时都需要提供更多的参数,如果其他组件调用它,那么很容易破坏其他东西。