Mysql:Cursor声明中的过程调用

时间:2011-11-03 19:29:24

标签: mysql stored-procedures cursor

我试图将MySql存储过程调用用作游标声明的一部分(用于嵌套过程并能够查看结果):

declare myCursor cursor for call MyProcedure(param1,param2,param3);

当我这样做时,我收到1064错误:你的SQL语法有错误;查看与MySQL服务器版本对应的手册,以获得正确的语法。

任何人都知道如何做到这一点?

谢谢

2 个答案:

答案 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