Я ожидаю, что следующая сохраненная процедура вернет серию строк, в то время как она возвращает только 1
CREATE PROCEDURE example()
BEGIN
DECLARE current_id INT;
DECLARE done INT DEFAULT 0;
DECLARE cur_main CURSOR FOR SELECT id from tasks;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur_main;
FETCH cur_main into current_id;
lp:WHILE not done DO
FETCH cur_main into current_id;
IF done = 1 THEN
LEAVE lp;
END IF;
SELECT * from tasks WHERE id = current_id;
END WHILE lp;
CLOSE cur_main;
END
Любая помощь? Это мой первый раз с MySQL хранимыми процедурами.
К сожалению, MySQL
не возвращает несколько строк таким образом.
Эта процедура:
CREATE PROCEDURE example()
BEGIN
SELECT 1;
SELECT 2;
END;
будет возвращать несколько наборов результатов, а не строк.
Не могли бы вы описать, какую задачу вы хотите достичь с помощью этой хранимой процедуры?
Спасибо за ответы. Мне удалось сделать то, что я сделал, с помощью временной таблицы, где я INSERT все результаты, а затем SELECTING * FROM этой таблицы.
Вот еще одна возможность. Еще раз взглянув на ваш код, я заметил, что вы делаете FETCH перед циклом while, который даст вам первую запись. Вы вводите цикл WHILE, а затем выполняете еще один FETCH. Обычно вы вводите цикл while, выполняете обработку с текущей записью, затем выполняете еще один FETCH прямо перед циклом цикла. Кроме того, перемещая следующий FETCH в конец тела цикла, вы также можете удалить тест IF.
FETCH cur_main into current_id;
lp:WHILE not done DO
SELECT * from tasks WHERE id = current_id;
FETCH cur_main into current_id;
END WHILE lp;
Возможно, вы захотите попробовать это утверждение, а не существующий тест.
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
Действие по умолчанию для обработчика продолжения - EXIT для непревзойденного значения SQLSTATE. Константа "NOT FOUND" охватывает все допустимые условия 020.