BEGIN ... END
にカーソルをネストすることで、やりたいことができます。 ブロック。 RolandBoumanの「NestingMySQLCursorLoops」
を参照してください。 詳細については記事をご覧ください。ネストされたカーソルを実行する代わりにクエリを書き直すことができる場合が多いため、この手法についての彼のコメントはしばしば不要であることに注意する価値があるかもしれません。
それでもカーソルをループにネストする必要がある場合、コードは次のようになります。
increment: LOOP
block_cursor: BEGIN
DECLARE cur1 CURSOR FOR SELECT person_id, publication_id FROM p_publication WHERE person_id = new_count;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO pub_id, per_id;
IF NOT done THEN
INSERT INTO test.t2 VALUES (pub_id, per_id);
END IF;
SET new_count = new_count + 1;
UNTIL done END REPEAT;
CLOSE cur1;
IF !(new_count < old_count ) THEN
LEAVE increment;
END IF;
END block_cursor;
END LOOP increment;