Mysql: вызов процедуры в объявлении курсора - PullRequest
2 голосов
/ 03 ноября 2011

Я пытаюсь использовать вызов хранимой процедуры MySql как часть моего объявления курсора (для вложения процедур и просмотра результатов):

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

Когда я это делаю, я получаю 1064ошибка: у вас есть ошибка в вашем синтаксисе SQL;проверьте правильность синтаксиса в руководстве, соответствующем версии вашего сервера MySQL.

Кто-нибудь знает, как этого добиться?

Спасибо

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

http://dev.mysql.com/doc/refman/5.5/en/declare-cursor.html

Говорит:

ОБЪЯВЛЯТЬ имя курсора CURSOR FOR select_statement

call не select_statement.
Вот почему вы получаете ошибку.

Обходной путь
Если вы используете хранимый процесс, который возвращает набор результатов, используйте вместо этого эквивалентный оператор выбора.

Проблема
Проблема в том, что call может возвращать 0, 1 или более наборов результатов.
Курсор может обрабатывать только 1 случай набора результатов, а AFAIK MySQL не имеетспособ точно знать, сколько наборов результатов вызовет.

0 голосов
/ 08 октября 2016

Вот как я это сделал:

Пусть процедура вернет свой набор результатов во временную таблицу.

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
...