2013-04-26 2 views
1

У меня есть 2 курсора в mysql, второй курсор должен запускаться с каждой первой итерацией курсора, не открывая его снова. Есть идеи? Заранее спасибо для экс: -Можно ли использовать один курсор несколько раз, не открывая его снова?

DECLARE email_not_found INT DEFAULT 0; 
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET email_not_found = 1; 
open cur1; 
open cur2; 

REPEAT 
FETCH cur1 INTO s1; 

REPEAT 
    FETCH cur2 INTO s2; 

    if s1=s2 
     do something. 

UNTIL email_not_found=1 END REPEAT; 

UNTIL email_not_found=1 END REPEAT; 
close cur1; 
close cur2; 

ответ

1

Вам нужно открыть курсор каждый раз. Согласно документации на курсор MySQL, курсор является readonly и Nonscrollable: может пересекаться только в одном направлении и не может пропускать строки

По этой причине вы не можете перемотать его, и вам нужно открыть курсор в вашем цикле.

+0

Поскольку данные в курсоре огромны, я не хочу открывать несколько раз, вместо этого использую его несколько раз. После достижения в конце курсора мы можем вернуть курсор назад к началу? – AmbrishK

+0

MySQL Cursor не прокручивается, поэтому вы можете двигаться только вперед. Альтернатива, попробуйте заменить два вложенных курсора на JOINS, но я не уверен, насколько это возможно или нет, не заглядывая в запросы для двух курсоров. – Amit

+0

Чтобы избежать объединения непосредственно в таблицы, я использую курсоры. Потому что есть данные за один день, и я думал, что будет легко взять целые данные сразу в курсор, чем объединения и группы, которые внутренне сортируют много времени, и это стоит дороже. THANK YOU – AmbrishK

Смежные вопросы