MySQL 存储过程 - 如何引用内部创建的记录集
Posted
技术标签:
【中文标题】MySQL 存储过程 - 如何引用内部创建的记录集【英文标题】:MySQL Stored Procedure - how to reference internally created recordset 【发布时间】:2014-08-18 00:14:43 【问题描述】:我很好奇如何在同一个存储过程中从辅助查询或 SET 调用中引用现有的存储过程 SELECT 语句。
例如:
CREATE PROCEDURE 'mysp' (OUT sumvalue INT)
BEGIN
-- This is the core recordset the SP returns
SELECT * FROM Table
-- I also want to return a value based on the above recordset
SET sumvale = SUM(previousselect.values)
END
基本上,我有一个返回详细记录集的 SP,我需要根据该记录集中的数据返回 SUM 和自定义值。问题是我无法弄清楚如何在 SELECT 语句之后引用数据(例如,它是否创建了一个我可以使用的内部引用,例如 @recordset1.X)。
任何帮助将不胜感激。
【问题讨论】:
How to use Table output from stored mysql Procedure 的可能重复项 【参考方案1】:尝试使用this链接中的光标:
由于 MySql 不允许您从存储过程或函数返回记录集,您可以试试这个:
CREATE DEFINER=`root`@`localhost` PROCEDURE `some_procedure`(out some_id int)
BEGIN
declare done boolean default false;
declare id int;
declare tot decimal(10,2);
declare some_cursor cursor for
select id, total from some_table where id = some_id;
declare continue handler for not found set done = true;
open some_cursor;
loop1: loop
fetch some_cursor into id, tot;
if done=true then
leave loop1;
end if;
//do your calculation here or whatever necessary you want to do with the code
end loop loop1;
END;
【讨论】:
嗯;这似乎过于复杂。注意我可以专门创建一个 SP 来获取值的总和,但我不想创建冗余调用(似乎效率低下)。 SELECT 语句执行后无法在存储过程中引用它的记录集吗?请注意,我们使用 Node.js 作为 Web 处理框架,并且存储过程返回记录集就可以了,所以不确定您所说的“MySql 不允许您从 ... store[d] 过程返回记录集”是什么意思”。他们返回记录集就好了。 是的,过程可以从任何各种 sql 查询返回记录集,但不能通过从另一个存储过程内部调用。我以前也遇到过这种情况,最后我使用游标而不是 mysql 存储的视图。以上是关于MySQL 存储过程 - 如何引用内部创建的记录集的主要内容,如果未能解决你的问题,请参考以下文章