Выражение повторяется до тех пор пока условие Until ложно, различие с циклом While в том, что этот цикл выполняется хотя бы один раз.
1. mysql> CREATE PROCEDURE test_repeat(IN a INT)
2. -> BEGIN
3. -> REPEAT
4. -> SELECT a;
5. -> SET a = a + 1;
6. -> UNTIL a > 5
7. -> END REPEAT;
8. -> END|
9. Query OK, 0 rows affected (0.00 sec)
1. mysql> CREATE PROCEDURE test_repeat(IN a INT)
2. -> BEGIN
3. -> REPEAT
4. -> SELECT a;
5. -> SET a = a + 1;
6. -> UNTIL a > 5
7. -> END REPEAT;
8. -> END|
9. Query OK, 0 rows affected (0.00 sec)
Курсоры в MySQL. Применение и синтаксис. Примеры.
Главная → Статьи → Курсоры в MySQL
Курсоры прекрасно поддерживаются в хранимых процедурах, функциях и триггерах. Синтаксис такой же, как и во внедренном SQL. Курсоры пока только для чтения, однонаправленные (т.е по набору можно ходить только вперед без возможности вернуться) и невосприимчивы. Невосприимчивость означает, что сервер может создавать копию результатирующей таблицы, а может и не создавать, формируя ее на лету .
Курсоры должны быть объявлены до их использования. Переменные с условиями объявляются прежде курсоров. Обработчики объявляются строго после объявления курсоров.
Например:
CREATE PROCEDURE curdemo() BEGIN DECLARE done INT DEFAULT 0; 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 SQLSTATE '02000' SET done = 1;
OPEN cur1; OPEN cur2;
REPEAT FETCH cur1 INTO a, b; FETCH cur2 INTO c; IF NOT done THEN IF b < c THEN INSERT INTO test.t3 VALUES (a,b); ELSE INSERT INTO test.t3 VALUES (a,c); END IF; END IF; UNTIL done END REPEAT;