Аналог FOR… IN… LOOP цикла в MySQL?

В оракле есть замечательная конструкция FOR… IN… LOOP позволяющая обработать в цикле всю выборку по запросу.

Например:
FOR rec IN (SELECT t.id, t.doc_type, t.guid, t.CAPTION FROM test_table  t)
LOOP
IF rec.id > 10 THEN Dbms_Output.put_line(rec.id||' '||rec.CAPTION); END IF;
END LOOP;



Не могу найти, есть ли аналог такой структуры в MySQL?


UPD.

BEGIN
  DECLARE cur CURSOR FOR SELECT id, doc_type, guid, CAPTION FROM test_table  t;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
Open cur;
WHILE not done  DO 
// cur - текущая запись
END WHILE;
Close cur; 
END;
  • Вопрос задан
  • 25886 просмотров
Решения вопроса 1
ohifck
@ohifck
Смотрите курсоры.
Например
CREATE PROCEDURE curdemo()
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE a CHAR(16);
  DECLARE b, c INT;
  DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
  DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  OPEN cur1;
  OPEN cur2;

  read_loop: LOOP
    FETCH cur1 INTO a, b;
    FETCH cur2 INTO c;
    IF done THEN
      LEAVE read_loop;
    END IF;
    IF b < c THEN
      INSERT INTO test.t3 VALUES (a,b);
    ELSE
      INSERT INTO test.t3 VALUES (a,c);
    END IF;
  END LOOP;

  CLOSE cur1;
  CLOSE cur2;
END;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы