Использование курсора в хранимой процедуре для зацикливания строк MySQL

DGMS89 спросил: 03 ноября 2018 в 09:51 в: mysql

Сценарий. У меня есть хранимая процедура, которая получает данные из таблицы на основе 2 входных данных: даты и строки (которая является именем столбца). Первая процедура вызывается из другой процедуры, которая использует курсор для циклического перемещения по строкам таблицы и передачи каждой строки в строку первой процедуры (имена столбцов, которые необходимо проверить). Мои данные для второй процедуры (которая вызывается напрямую) - это дата.

Проблема: Моя первая процедура работает нормально, когда я вызываю ее самостоятельно. Моя вторая процедура выдает некоторые синтаксические ошибки, которые я не знаю, как исправить.

Obs: Я уже проверял некоторые другие ответы здесь на эти темы, такие как Использование курсора в цикле хранимой процедуры и Как выполнить цикл по всем строкам таблицы? (MySQL) . На самом деле моя вторая процедура теперь является модифицированной версией запроса, который я нашел на SE https://dba.stackexchange.com/questions/138549/mysql-loop-through-a-table-running-a-stored-procedure-on- each-entry

Проблема: В настоящее время код выдает ошибку в строке 5 в моем объявлении @colval.

Код:

-- Procedure for looping through rows of `wanted_columns` table:
delimiter $$
drop procedure if exists `data_check_loop` $$
create procedure `data_check_loop`(`wanted_date` date)
beginset @dateval = `wanted_date`;
declare colval string default null;-- boolean variable to indicate cursor is out of data
declare done tinyint default false;-- declare a cursor to select the desired columns from the desired source table
declare cursor1
    cursor for
        select t1.c1
        from `wanted_columns` t1; -- catch exceptions
        declare continue handler for not found set done = true;-- open the cursor
        open cursor1;
            my_loop: 
            loop
                fetch next from cursor1 into colval;
                if done then 
                    leave my_loop; 
                else  
                    call `set_column_stats`(colval, dateval);
                end if;
            end loop;
        close cursor1;end $$
delimiter ;

Вопрос. Есть идеи, как это исправить?

0 ответов