我试图将MySql存储过程调用用作游标声明的一部分(用于嵌套过程并能够查看结果):
declare myCursor cursor for call MyProcedure(param1,param2,param3);
当我这样做时,我收到1064错误:你的SQL语法有错误;查看与MySQL服务器版本对应的手册,以获得正确的语法。
任何人都知道如何做到这一点?
谢谢
答案 0 :(得分:2)
http://dev.mysql.com/doc/refman/5.5/en/declare-cursor.html
表示:
DECLARE cursor_name CURSOR FOR select_statement
call
不是 select_statement
这就是你收到错误的原因。
解决方法强>
如果您正在使用返回结果集的存储过程,请改用等效的select语句。
<强>问题强>
问题是call
可以返回0,1个或更多结果集
游标只能处理1个结果集的情况,而AFAIK MySQL无法确定调用将返回多少个结果集。
答案 1 :(得分:0)
我是这样做的:
让程序在临时表中返回其结果集。
create procedure GetPeople(in unitId bigint(20))
begin
create temporary table if not exists GetPeople_result like People;
truncate table GetPeople_result;
insert into GetPeople_result select * from
-- your select here
;
end
为临时表创建游标。
create procedure DoSomethingWithAllPeople(in unitId bigint(20))
begin
declare allPeopleCursor cursor for select PersonId from GetPeople_result; -- select the result from GetPeople
call GetPeople(unitId); -- create the GetPeople_result table and fill it
-- iterate cursor
end