Cursors BEGIN DECLARE v1 INT DEFAULT 5; WHILE v1 > 0 DO ... SET v1 = v1 - 1; END WHILE; END; 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; 2804 13.6.6.1 Cursor CLOSE Statement CLOSE  cursor_name This statement closes a previously opened cursor. For an example, see Section 13.6.6, “Cursors” . An error occurs if the cursor is not open. If not closed explicitly, a cursor is closed at the end of the  BEGIN ... END  block in which it was declared. Example: Cursor declarations must appear before handler declarations and after variable and condition declarations. MySQL supports cursors inside stored programs. The syntax is as in embedded SQL. Cursors have these properties: 13.6.6 Cursors •Asensitive: The server may or may not make a copy of its result table •Read only: Not updatable •Nonscrollable: Can be traversed only in one direction and cannot skip rows