Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / курсор в хранимке / 12 сообщений из 12, страница 1 из 1
02.09.2013, 18:08:19
    #38384506
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
курсор в хранимке
необходимо использовать несколько разных курсоров последовательно для разных наборов.
подскажите правила для их определения/задания.
везде встречаются примеры только для одного курсора или вложнных.
...
Рейтинг: 0 / 0
02.09.2013, 18:33:06
    #38384530
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
курсор в хранимке
Вложенных курсоров не бывает. Курсоры независимы.
...
Рейтинг: 0 / 0
02.09.2013, 18:50:11
    #38384557
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
курсор в хранимке
AkinaВложенных курсоров не бывает. Курсоры независимы.

имелось ввиду перебор один в другом, но это не по теме...
...
Рейтинг: 0 / 0
02.09.2013, 20:36:23
    #38384659
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
курсор в хранимке
вадяперебор один в другом
Повторяю:
AkinaКурсоры независимы.
Чтобы наконец стало понятно, о чём речь - приведите пример.
...
Рейтинг: 0 / 0
02.09.2013, 21:14:17
    #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
02.09.2013, 23:03:28
    #38384767
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
курсор в хранимке
Stupid_BOT,
я так делал, но второй курсор не останавливался при достижении конца набора данных, поэтому и возник вопрос

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

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

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

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

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

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


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


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