powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / курсор в хранимке
12 сообщений из 12, страница 1 из 1
курсор в хранимке
    #38384506
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
необходимо использовать несколько разных курсоров последовательно для разных наборов.
подскажите правила для их определения/задания.
везде встречаются примеры только для одного курсора или вложнных.
...
Рейтинг: 0 / 0
курсор в хранимке
    #38384530
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вложенных курсоров не бывает. Курсоры независимы.
...
Рейтинг: 0 / 0
курсор в хранимке
    #38384557
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaВложенных курсоров не бывает. Курсоры независимы.

имелось ввиду перебор один в другом, но это не по теме...
...
Рейтинг: 0 / 0
курсор в хранимке
    #38384659
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяперебор один в другом
Повторяю:
AkinaКурсоры независимы.
Чтобы наконец стало понятно, о чём речь - приведите пример.
...
Рейтинг: 0 / 0
курсор в хранимке
    #38384713
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
без разницы "последовательные" курсоры нужны или "вложенные". Принцип не меняется: объявить, открыть, фетчить, закрыть.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE PROCEDURE curdemo()
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1; /* первый курсор */
  DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;       /* второй курсор */
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;  /* обработчик ER_SP_FETCH_NO_DATA */

  OPEN cur1;
  /* действия с первым курсором 
    ...
  */
  CLOSE cur1;

  OPEN cur2;
  /* действия со вторым курсором 
    ...
  */
  CLOSE cur2;
END

...
Рейтинг: 0 / 0
курсор в хранимке
    #38384767
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stupid_BOT,
я так делал, но второй курсор не останавливался при достижении конца набора данных, поэтому и возник вопрос

2Akina
в данном случае это не имеет значения, и уточнять формулировки не имеет смысла,это чисто условные формулировки
...
Рейтинг: 0 / 0
курсор в хранимке
    #38384902
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадявторой курсор не останавливался при достижении конца набора данных
Курсор сам останавливаться не станет - его надо останавливать. Как именно - проверкой на пустую запись, по хэндлеру ошибки или ещё как - это уже второй вопрос. Хотя и важный - именно кривая реализация этого момента могла породить тему...

вадяв данном случае это не имеет значения, и уточнять формулировки не имеет смысла,это чисто условные формулировкиНи хрена. Метод остановки перебора, применимый для кода Stupid_BOT, может оказаться наприменимым для варианта
Код: sql
1.
2.
3.
4.
5.
6.
7.
  OPEN cur1; 
    ... -- действия с первым курсором
      OPEN cur2;
       ... -- действия со вторым курсором
      CLOSE cur2;
    ... -- дальнейшие действия с первым курсором
  CLOSE cur1;
...
Рейтинг: 0 / 0
курсор в хранимке
    #38384921
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКурсор сам останавливаться не станет - его надо останавливать. Как именно - проверкой на пустую запись, по хэндлеру ошибки или ещё как - это уже второй вопрос.

Курсор сам останавливаться не станет - его надо останавливать. - это понятно :) и подразумевалось...

перефразирую вопрос:

как остановить второй курсор для варианта Stupid_BOT ?
...
Рейтинг: 0 / 0
курсор в хранимке
    #38384936
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я выкрутился обернув каждый блок с курсором (определение и исполнение) в begin end

но это не красиво..
...
Рейтинг: 0 / 0
курсор в хранимке
    #38384941
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадякак остановить второй курсор для варианта Stupid_BOT ?Простейший вариант - проверять, что в поле уникального идентификатора пришёл NULL.
...
Рейтинг: 0 / 0
курсор в хранимке
    #38384955
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Вы внимательно рассмотрели примеры с одним курсором ? С двумя и более принцип не меняется, - перед фетчем/серией фетчей сбрасываете флаг обработчика ER_SP_FETCH_NO_DATA, после каждого фетча проверяете флаг. Будет у Вас один флаг на все курсоры или по одному на каждый... не всё ли равно ?
...
Рейтинг: 0 / 0
курсор в хранимке
    #38385024
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stupid_BOTвадя,
Вы внимательно рассмотрели примеры с одним курсором ? С двумя и более принцип не меняется, - перед фетчем/серией фетчей сбрасываете флаг обработчика ER_SP_FETCH_NO_DATA, после каждого фетча проверяете флаг. Будет у Вас один флаг на все курсоры или по одному на каждый... не всё ли равно ?


редко пользую курсор, логика его подзабывается...
я проверял, но не там
в твоем примере с кодом не хватало выделенного для полного ответа...
теперь всё на местах :)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / курсор в хранимке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]